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)
# 下图中, 颜色深的部分数据量比较大

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apifox 生成签名

目录 前言准备编写签名脚本签名说明捋清思路编码获取签名所需的参数生成签名将签名放到合适的位置完整代码 在apifox中配置脚本新增公共脚本引用公共脚本添加环境变量 参考 前言 略 准备 查看apifox提供的最佳实践文章:接口签名如何处理 编写签名脚本 签名说明…

Ant Design Pro

一:Ant Design pro是什么: Ant Design Pro 是基于 Ant Design 和 umi 的封装的一整套企业级中后台前端/设计解决方案,致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源&#x…

【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 持续时间断…

【Python机器学习】主成分分析(PCA)

主成分分析(PCA)是一种旋转数据集的方法,旋转后的数特征在统计上不相关。在做完这种旋转之后,通常是根据新特征对解释数据的重要性来选择它的一个子集。 举例: import mglearn.plots import matplotlib.pyplot as pl…

python tqdm怎么安装

tqdm是一个显示循环的进度条的库。taqadum, تقدّم)在阿拉伯语中的意思是进展。tqdm可以在长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator),是一个快速、扩展性强的进度条工具库。 tqdm库的安装 在CMD窗口下输…

利用梯度提升树分类法实现乳腺癌数据集分类

目录 1. 作者介绍2. 梯度提升树算法2.1 Boosting 算法2.2 Boosting Tree (提升树)2.3 梯度提升树(Gradient Boosting Tree) 3. 利用梯度提升树分类法实现乳腺癌数据集分类实验3.1 乳腺癌数据集介绍3.2 实验过程3.3 实验结果3.4 完…

【Microelectronic Systems】期末速通

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统,微控制器,与ARM 1.1什么是嵌入式系统? 微处理器不仅仅存在于通用计算机中,也可以安置在一些不需要计算的设备内部,比如洗衣机,摄像机。微处理器常常可以控制…

​【JS重点知识04】JS执行机制(重点面试题)

学前案例: console.log(111); setTimeout(function () {console.log(222); }, 1000) console.log(333); //输出结果:1111 333 222 console.log(111); setTimeout(function () {console.log(222); }, 0) console.log(333); //输出结果:111 33…

Django 里的表格内容做修改

当Django里表格内容需要做修改&#xff0c;可以这么操作。 先看效果图 修改后的表格 1. 先得在 asset_list.html 里修改。你们的html有可能跟我不一样 <table border"1px"><thead><tr><th>ID</th><th>标题</th><th…

AVL树【C++实现】

文章目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转新节点插入较高右子树的右侧---右右&#xff1a;左单旋新节点插入较高左子树的左侧---左左&#xff1a;右单旋新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋新节点插入较高右子树的左侧---右左&am…

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

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

ceph对象储存的使用

radosgw-admin user create --uid“user1” --display-name“user1” #创建用户 sudo apt install s3cmd cephadminceph-mgr01:~/ceph-cluster/s3$ s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed desc…

Visual C++ Redistributable下载

安装程序的时候提示丢失mfc140u.dll 如下图,查了资料说可以下载Visual C Redistributable来进行处理 下载Visual C Redistributable 1.打开网站 https://www.microsoft.com/zh-cn/download/details.aspx?id48145&751be11f-ede8-5a0c-058c-2ee190a24fa6True) 2.点击下载 …

Java面试题:Redis持久化问题

Redis持久化问题 RDB (Redis Database Backup File) Redis数据快照 将内存中的所有数据都记录到磁盘中做快照 当Redis实例故障重启时,从磁盘读取快照文件恢复数据 使用 save/bgsave命令进行手动快照 save使用主进程执行RDB,对所有命令都进行阻塞 bgsave使用子进程执行R…

创新案例 | AI数据驱动下的全域数字化转型的五大关键洞见

近年来通过全域数字化转型在竞争激烈的市场中脱颖而出。传统零食行业面临市场竞争加剧和消费者需求多样化的挑战&#xff0c;如何利用数据驱动和AI技术&#xff0c;能更好地实现会员运营效率和用户满意度的显著提升呢&#xff1f;本文将探讨全域数字化转型的五大关键洞见&#…

【C++】STL中List的基本功能的模拟实现

前言&#xff1a;在前面学习了STL中list的使用方法&#xff0c;现在我们就进一步的讲解List的一些基本功能的模拟实现&#xff0c;这一讲博主认为是最近比较难的一个地方&#xff0c;各位一起加油。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; …

Excel 交叉表的格转成列,行转成格

Excel里交叉表的左表头是卡车号&#xff0c;上表头是工作&#xff0c;交叉格是工作编号。 ABCD1Truck NumberJob1Job2Job3271592859285928372395859282971473297159282971 要求&#xff1a;将交叉格转为列&#xff0c;左表头转为格。 ABC1297139585928272727137371473715726…

深度学习的实用性探究:虚幻还是现实?

深度学习的实用性探究&#xff1a;虚幻还是现实&#xff1f; 深度学习作为人工智能领域的一个热点&#xff0c;已经在学术和工业界引起了广泛的关注。尽管深度学习技术显示出惊人的性能和潜力&#xff0c;但有时它们给人的感觉是“虚”的&#xff0c;或许是因为它们的抽象性和…

微服务框架下,因发送端与消费端的vhost不一致,导致rabbitmq出现严重的消息堆积

一、背景 在生产环境下&#xff0c;rabbitmq机器出现磁盘空间不足的报警&#xff0c;发现是某个队列的消息只有生产&#xff0c;迟迟没有消费。 可以得到的信息是&#xff1a; 队列queue是data_center_file_change_queue队列绑定的交换机是resourceChangeExchange&#xff0c…

PLC通过Profinet转Modbus网关与流量计通讯案例

1、案例背景 在工业自动化系统中&#xff0c;PLC(可编程逻辑控制器)与流量计之间的通信是保证以后设备生产数据准确传输和实现控制功能的关键。但是&#xff0c;由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus)&#xff0c;因此需要一种转换机制来实现它们之间的通…