python-df的合并与Matplotlib绘图

1 数据连接 concat merge join (append 作为了解)

  • append 竖直方向追加, 在最新的pandas版本中已经被删除掉了, 这里推荐使用concat

1.1 pd.concat

两张表, 通过行名、列名对齐进行连接

import pandas as pd
df1 = pd.DataFrame([[1, 2, 3], [1, 10, 20], [5, 6, 7], [3, 9, 0], [8, 0, 3]], columns=['x1', 'x2', 'x3'])
df2 = pd.DataFrame([[1, 2], [1, 10], [1, 3], [4, 6], [3, 9]], columns=['x1', 'x4'])
pd.concat([df1, df2], axis=1)
pd.concat([df1, df2],join='inner')

axis=1 默认是0 , 上下连接, 用列名做对齐 = 1 左右连接 用行名对齐

join = 'inner' 默认 ‘outer’ outer 会保留连接的两张表的所有的信息, 有列名、行名不匹配的时候, 用NaN填充, 如果是inner 只会连接 行名、列名相同的部分

1.2 merge 连接 类似于SQL的join

# 写法1
df1.merge(df2, on='列名', how='固定值')
# 写法2
pd.merge(df1, df2, on='列名', how='固定值')
  • merge函数有2种常用参数,参数说明如下

    • 参数on='列名',表示基于哪一列的列值进行合并操作

    • 参数how='固定值',表示合并后如何处理行索引,固定参数具体如下:

      • how='left' 对应SQL中的left join,保留左侧表df1中的所有数据

      • how='right' 对应SQL中的right join,保留右侧表df2中的所有数据

      • how='inner' 对应SQL中的inner,只保留左右两侧df1和df2都有的数据

      • how='outer' 对应SQL中的join,保留左右两侧侧表df1和df2中的所有数据

  • merge横向连接多个关联数据集具体使用

    df3 = pd.merge(df1, df2, how='left', on='x1')
    df4 = pd.merge(df1, df2, how='right', on='x1')
    df5 = pd.merge(df1, df2, how='inner', on='x1')
    df6 = pd.merge(df1, df2, how='outer', on='x1')
df1.merge(df2, left_on='x1', right_on='x4', how='inner',suffixes=('_left', '_right'))

两张表要关联的字段名字不同, left_on 左表用于关联的字段名 right_on 右表用于关联的字段名

suffixes 后缀, 当关联结果中,出现了同名的字段, 用于区分哪个字段来自于哪一张表, 默认是(' _ x', '_ y')

1.3 join合并

df1.join(df2,lsuffix='left',rsuffix='right')

如果这里不写on 这个参数, 和pd.concat axis=1 的时候完全相同

df1.join(df2,on='x1',lsuffix='left',rsuffix='right')

df1 用x1 和 df2的index 做join 左表的一列数据和右表的行索引 进行合并

join功能可以用concat 和 merge 替代。 这部分作为了解就可以了

2 转置和透视表

df.T 行变列, 列变行

2.1 透视表

  • 计算的结果可以通过分组聚合来实现, 只不过是展示的方式跟分组聚合有差异

  • 统计每个城市线下门店各种品类商品总销售额

uniqlo_df_offline = uniqlo_df[uniqlo_df['销售渠道']=='线下'] # 筛选出线下的销售数据
result_df = uniqlo_df_offline.groupby(['城市','产品名称'])['销售金额'].sum()
# 通过分组聚合统计不同城市不同产品的总销售额
  • 通过透视表实现

uniqlo_df_offline.pivot_table(index='城市',columns='产品名称',values='销售金额',aggfunc='sum')

index 分组字段之一, 在结果中作为行索引

columns 分组字段之一, 在透视表结果中作为列名

values 聚合字段, 在透视表的结果中展示在值的位置上

aggfunc 聚合函数, 对聚合字段使用的统计函数名字

需要注意的是, index columns values 都可以传列表, aggfunc 可以针对不同的value 选择不同的聚合方式, 此时需要传入字典 但是不推荐把表做的过于复杂

df.groupby()[].mean()

df['列名'].value_counts()

df['列名'].unique()

df.sort_values()

df.drop()

df.drop_duplicates()

pd.cut()

pd.to_datetime() 转日期时间类型

  • s[日期].dt.year weekday

df.merge()

pd.concat()

df.head()

df.info()

df.describe()

df[''].apply()

df.loc /df.iloc

max() min() mean() count() sum() std() quantile() df.corr()

根据条件筛选数据

分组聚合

pd.cut()

3 Matplotlib数据可视化

数据可视化的库一共有两类

基于Matplotlib的, 绘制的是静态的图形

  • pandas

  • seaborn

用javascript 实现的 比如 echarts → pyecharts plotly

  • 随着使用的时候再去讲

对大家的要求

  • 知道什么场景选择什么样的图表

  • 代码能够看懂, 基于已有的代码可以修改实现自己想要的效果

3.1 Matplotlib 的绘图套路

import pandas as pd
import matplotlib.pyplot as plt
​
x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标
# 面向过程的API 通过plt 绘图工具, 调用方法, 画图
plt.figure(figsize=(15,3)) # 创建绘图区域  figsize指定区域大小  15 宽度 3高度
plt.plot(x, y)
plt.xlim(-8,8)
plt.xlabel('X Axis',size=15)   # 设置X轴的标题
plt.ylabel('Y Axis',size=10)  # 设置Y轴标题
plt.title('Line plot',size=15) # 添加 图大标题
plt.grid(True) # 网格线
plt.show()
# 面向对象的API  先获取坐标轴的对象, 通过坐标轴对象调用方法 设置属性
fig,ax = plt.subplots(figsize=(15,3)) # 返回fig ax(坐标轴)
ax.plot(x,y)
ax.set_xlim(-3,8)
ax.set_ylim(-3,8)
ax.set_xlabel('X Axis',size=15)
ax.set_ylabel('Y Axis',size=10)
ax.set_title('Line plot',size=15)
plt.show()

基本套路

import matplotlib.pyplot as plt

plt.figure(figsize=(15,3))

plt.plot(x, y)

plt.show()

3.2 单变量可视化——绘制直方图

这里使用seaborn提供的餐馆小费数据

tips = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/tips.csv')

对餐馆消费账单的分布情况进行可视化

# 单变量的分布 可以绘制直方图
plt.figure(figsize=(16,8))
plt.hist(tips['total_bill'],bins=8)
# 直方图使用场景, 单独的取值是连续值(数值型) 变量,看这个变量的分布情况就可以选择直方图
# 绘制的过程, 把数据从小到大排序, bins 数量决定了数据要分成几组, 分组的方式等距分组(每组的上下边界的差值尽可能一样)
# 统计落在每一组的数据的条目数, 通过一个柱状图绘制出来,一个柱子代表一组, 柱子的高度取决于这一组有多少条数据

3.3 双变量可视化 ——散点图

plt.figure(figsize=(8,6))
plt.scatter(tips['total_bill'],tips['tip'])
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

散点图的使用场景

# 散点图使用场景 两个连续型变量 发现他们之间是否存在关联( 一个变量是否随着另一个变量的变化而变化) 
# scatter 一个变量作为x轴坐标, 另一个变量做为y轴坐标

4 pandas 数据可视化

pandas 集成了Matplotlib, 画图功能就是对Matplotlib的封装

画图API

df1.plot()  # 默认折线图
df1['x'].plot.bar()
​
# df.plot.line() # 折线图的全写方式
# df.plot.bar() # 柱状图
# df.plot.barh() # 横向柱状图 (条形图)
# df.plot.hist() # 直方图
# df.plot.box() # 箱形图
# df.plot.kde() # 核密度估计图
# df.plot.density() # 同 df.plot.kde()
# df.plot.area() # 面积图
# s.plot.pie() # 饼图
# df.plot.scatter() # 散点图
# df.plot.hexbin() # 六边形箱体图,或简称六边形图
plt.show()

柱状图

  • 多个类别, 取值不同在一起比大小

  • 举例使用小费数据, 统计周四周五周六周日, 平均账单金额

# 对day 进行分组, 对账单总金额求平均, 结果会返回Series 这里直接使用了Series的绘图API
tips.groupby('day')['total_bill'].mean().plot(kind='bar')

Series 调用plot方法, index 会作为x轴坐标 值values 会作为y轴坐标

饼图

  • 整体部分的关系, 所有的部分加到一起一定组成一个整体

tips.groupby('day')['total_bill'].sum().plot(kind='pie',autopct='%.2f%%')

假设这个餐馆每周只有周四到周日营业, 统计一下数据集中这段时间内, 周四~周日, 哪一天销售额占比更高

箱线图

蜂巢图 作为了解

  • 作用和散点图类似, 当数据量比较大的时候, 绘制散点图, 好多点会重复绘制到相同的位置, 普通的散点图不能读出这个信息来

movie_df = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/movie.csv')
# 加载电影数据, 查看收入gross 和 imdb_score 之间是否有关
# 绘制散点图,有些点覆盖到一起了
movie_df.plot.scatter(x='gross',y='imdb_score',figsize=(18,10))

绘制蜂巢图

movie_df.plot.hexbin(x='gross',y='imdb_score',figsize=(18,10),gridsize=20)
# 下图中, 颜色深的部分数据量比较大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/688234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MS1112驱动开发

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【电路笔记】-分贝

分贝 分贝是以 10 为底的对数比,用于表示电路中功率、电压或电流的增加或减少。 1、概述 一般来说,分贝是响度的度量。 在设计或使用放大器和滤波器电路时,计算中使用的一些数字可能非常大或非常小。 例如,如果我们将两个放大器级级联在一起,功率或电压增益分别为 20 和…

嵌入式Linux系统编程 — 2.1 标准I/O库简介

目录 1 标准I/O库简介 1.1 标准I/O库简介 1.2 标准 I/O 和文件 I/O 的区别 2 FILE 指针 3 标准I/O库的主要函数简介 4 标准输入、标准输出和标准错误 4.1 标准输入、标准输出和标准错误概念 4.2 示例程序 5 打开文件fopen() 5.1 fopen()函数简介 5.2 新建文件的权限…

全程自动化操作 自动生成图文发布,矩阵批量软件系统 日产1-3万篇

一、简介 图文发布对于现代网站运营至关重要,然而手动创建和发布图文内容效率低下且易出错。全自动化图文生成发布流程可以解决这个问题。本文将详细说明如何以编程方式实现这一流程。 二、模块设计 该流程主要包含三个模块:图像生成,文本生成…

前端解析文件流格式数据异常时并给提示

把后端返回的文件流格式转换成正常数据格式 断点调试返回值 network查看返回值 一、blob类型 let stringData:any await this.blobToString(res); blobToString(blob) { return new Promise((resolve, reject) > { const reader new FileReader(); reader.onloadend (…

通过U盘将第三方软件安装到各大品牌电视的方法

在本教程中,小武给大家整理了通过U盘的方式安装第三方软件到电视盒子上,可直接使用通用U盘的方式来进行安装。 如果您相应电视品牌按通用方式无法完成需求,下面为您也贴心整理了20款主流智能电视和电视盒子的U盘安装指南。这些步骤适用于小米…

Vxe UI vxe-form 实现折叠表单,当表单很多时实现自动收起与展开

Vxe UI vue vxe-form 实现折叠表单&#xff0c;当表单很多时实现自动收起与展开 代码 folding 用于将当前表单项设置为默认隐藏 collapse-node 设置折叠按钮&#xff0c;加上之后会自动在该表单项的右侧显示一个折叠按钮 <template><div><vxe-formtitle-colo…

c++ EECS280

Introduction Euchre (pronounced “YOO-kur”) is a card game popular in Michigan. The learning goals of this project include Abstract Data Types in C, Derived Classes, Inheritance, and Polymorphism. You’ll gain practice with C-style Object Oriented Progr…

操盘手专栏 | 0-1搞懂TikTok广告优化该怎么玩!

如果你正想要或计划投放TikTok广告来提高杠杆效益&#xff0c;是否有面临下面的难题&#xff1a; 难找到系统的TikTok投放知识&#xff1f; 不懂得如何制定广告计划&#xff1f; 投放效果怎样才算有效优化&#xff1f; ...... 为此&#xff0c;超店有数邀请到了拥有8年营销…

新媒体暴力起号必备因素!沈阳新媒体运营培训学校

1周涨粉10w&#xff1f;这对普通人来说可以说是天文数字&#xff0c;但只要掌握方式方法&#xff0c;普通人也能做到&#xff01; 面试经验丰富的人都深知&#xff0c;给面试官留下的第一印象相当重要&#xff0c;几乎决定了80%的面试机会。标题也是如此&#xff0c;在完成一篇…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…

达梦8 网络中断对系统的影响

测试环境&#xff1a;三节点实时主从 版本&#xff1a;--03134283938-20221019-172201-20018 测试1 系统没有启动确认监视器 关闭节点3网卡 登录节点1检查主库状态 显示向节点2发送归档成功&#xff0c;但无法收到节点3的消息&#xff0c;节点1挂起 日志报错如下&#xf…

Java和Web前端哪个有发展前景?

Java和Web前端都是当今技术行业里的热门岗位&#xff0c;岗位招聘需求量大&#xff0c;人才竞争度高&#xff0c;同学们掌握这两个岗位里其中任何一个的相关主流技术&#xff0c;都可以找到一份不错的职位。下面请允许笔者做一个简要的分析阐述&#xff1a; 一、Web前端 Web前…

算法题--华为od机试考试(围棋的气、用连续自然数之和来表达整数、亲子游戏)

目录 围棋的气 题目描述 输入描述 示例1 输入 输出 解析 答案 用连续自然数之和来表达整数 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 解析 答案 亲子游戏 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入…

plsql导入excel

1.建临时表&#xff1a;&#xff08;字段对应excel表头&#xff09; create table temp_old_table(atomname nvarchar2(4000), --原子名称koujingname nvarchar2(4000) --供应商名称);2.Plsql–>工具&#xff08;tool&#xff09;–>ODBC导入器&#xff08;ODBC Impo…

使用AutoGen框架进行多智能体协作:AI Agentic Design Patterns with AutoGen

AI Agentic Design Patterns with AutoGen 本文是学习https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen/ 这门课的学习笔记。 What you’ll learn in this course In AI Agentic Design Patterns with AutoGen you’ll learn how to buil…

【JMeter接口测试工具】第二节.JMeter基本功能介绍(中)【入门篇】

文章目录 前言四、信息头管理器五、Jmeter参数化 5.1 用户自定义的变量 5.2 csv批量添加 5.3 用户参数 5.4 随机数函数 5.5 计数器函数 5.6 时间函数六、Jmeter断言 6.0 断言介绍 6.1 响应断言 6.2 大小断言 6.3 持续时间断…

【人工智能】第三部分:ChatGPT的应用场景和挑战

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

vue3+ts 拖拽容器边缘,改变容器宽度和高度

例如&#xff1a;我们的代码编辑器 终端与代码区&#xff0c;可以纵向拖拽&#xff0c;改变两个容器高度 目录与代码区可以横向拖拽&#xff0c;改变两个容器宽度 本文使用vue3tstailwindcss&#xff0c;把横向纵向整合在一起写了&#xff0c;也可以分开使用 utils目录下新建…

【C++课程学习】:C++入门(函数重载)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f308;函数重载&#xff1a; &#x1f349;1.参数个数不同&#xff1a; &#x1f349;2.参数…