《爱上Pandas》系列-你还在用VLookup吗?
2020,努力做一个无可替代的人!
作者|小一
全文共2609字,阅读全文需11分钟
写在前面的话
本系列最后一篇文章,我在写这节之前回顾了一下前面四篇,有种仓促结尾的感觉。
我认识一个博主,专门写Pandas 的相关教程,写了几十上百篇文章了。
也并不是说他的文章质量不高,没有的事,只是要细说Pandas的话我这五篇是真盖不住。
幸好我们不是专门研究潘大师的,我们只是潘大师的模仿者
记住我们的主要目标:数据分析。
复习一下前面的文章:
《爱上潘大师》系列-与Series的初次相见
《爱上潘大师》系列- 你还记得那年的DataFrame 吗
《爱上潘大师》系列- 数据清洗常用方法推荐
《爱上潘大师》系列- 汇总统计用它就够了!
最后一篇系列文章,请珍惜潘大师最后的美好时光
正文
今天讲一个比较重要的内容,也是DataFrame 的高级应用。
在Excel 中,我们不光会用上节讲的汇总统计功能,还会用到数据表的合并、匹配
在DataFrame 中,多个数据表的合并拼接有四个方法:
append:提供了行方向(堆叠行)的拼接操作
join:提供了列方向(拼接列)的拼接操作,支持左联、右联、内联和外联四种操作类型
concat:通过行拼接(增加行)或列拼接(增加列)进行内联或外联拼接操作
merge:类似于SQL数据库操作,支持左联、右联、内联和外联等四种SQL操作类型
join 不大好用且在实际应用中用处不大,其他三个足够解决问题了。
append 操作
行方向的拼接操作,实现堆叠行的效果
数据处理过程中,经常会遇到这样一个问题:
数据格式都一样,每天一份数据,要进行汇总处理
以后遇到这个问题,数据量不是很大的话,你可以参考append 方法
# append 方法
append(self, other, ignore_index=False, sort=None):
other:另一个或多个df
ignore_index:若为True,则对index重新索引
sort:若为True,则根据列标签对列排序
看个例子:
创建一个2行4列的DataFrame
# 创建一个2行4列的DataFrame
df_append_data1 = pd.DataFrame(np.arange(8).reshape(2, 4),columns=['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
)# 输出zhangsan lisi wangwu zhaoliu
0 0 1 2 3
1 4 5 6 7
通过append 方法实现两个DataFram 的堆叠行操作
# 表的堆叠行操作
df_result = df_append_data1.append(df_append_data1)# 输出zhangsan lisi wangwu zhaoliu
0 0 1 2 3
1 4 5 6 7
0 0 1 2 3
1 4 5 6 7
可以看到,在原有数据的下面根据列名进行数据堆叠
如果列名对应不上,会相应的填充NA 值
如果想要设置新数据的行索引,可以通过ignore_index 设置
那如果是多个DataFrame 合并呢?
多个DataFrame 合并只需要将传入的参数设置为DataFrame 列表
# 多个DataFrame 合并,并重新设置索引
df_result = df_append_data1.append([df_append_data1, df_append_data1], ignore_index=True)# 输出zhangsan lisi wangwu zhaoliu
0 0 1 2 3
1 4 5 6 7
2 0 1 2 3
3 4 5 6 7
4 0 1 2 3
5 4 5 6 7
可以看到,对三个DataFrame 进行合并,且对数据结果的索引进行了重新生成操作
concat 操作
行拼接或列拼接的操作,实现增加行或增加列的效果
concat 可以用来进行两个表的行列拼接操作,具体拼接方式有内联或外联两种
如果你想过数据库操作,应该知道内联和外联的意思,我简单解释一下:
内联:两个数据集的交集
外联:交个数据集的并集
concat 的函数是这样的:(只列举部分重要参数)
# concat 操作
concat(objs, axis=0, join=‘outer’, ignore_index=False,...)
axis:拼接轴方向,默认为0,按行拼接
join:连接方式,默认外联(outer)
ignore_index:若为True,则对index进行索引
关于axis 这个概念可能刚开始大家会记混,我说下自己的记忆方法:
axis=0,按行拼接,新增行数据
asix=1,按列拼接,新增列数据
关于join 内联、外联的两种方式,我画个图你们看一下(记住这个图)
内联:C部分(去重后)即:交集
外联:A+B+C部分(去重后)即:并集
概念说完了,来看例子吧。
举个例子:如果有一组数据表示A,包含张三、李四的数学和英语成绩;有另一组数据表示B,包含张三、赵六的数学和Python成绩,如何联立两个数据集?
这个例子中,我们只能对两个数据集取外联,因为内联只会保留数学成绩
# 创建DataFrame
df_concat_data_1 = pd.DataFrame([['zhangsan', 90, 88], ['lisi', 91, 92]],columns=['Name', 'Maths', 'English']
)
df_concat_data_2 = pd.DataFrame([['zhangsan', 90, 75], ['zhaoliu', 58, 99]],columns=['Name', 'Maths', 'Python']
)# concat 操作
df_result = pd.concat([df_concat_data_1, df_concat_data_2], join='outer', axis=0, ignore_index=True)# 输出English Maths Name Python
0 88.0 90 zhangsan NaN
1 92.0 91 lisi NaN
2 NaN 90 zhangsan 75.0
3 NaN 58 zhaoliu 99.0
其中,concat 中的join 和axis 都维持默认设置,写出来不过是为了看的更清楚
concat 只能对数据进行简单的拼接,而上面例子中的张三应该是一个人,但是却并不通过concat 实现匹配功能
为了实现匹配这个功能,对,用merge 操作!
merge 操作
类似于SQL数据库操作,实现不同数据表的数据匹配的效果
再来看一下上面的例子用merge 函数是什么结果吧
# merge 操作
pd.merge(df_concat_data_1, df_concat_data_2, how='outer', on='Name'# 输出Name Maths_x English Maths_y Python
0 zhangsan 90.0 88.0 90.0 75.0
1 lisi 91.0 92.0 NaN NaN
2 zhaoliu NaN NaN 58.0 99.0
看见了没?merge 函数会根据name 列对数据进行匹配合并,这才是我们想要的结果
具体了解一下merge 函数的用法:
merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=(’_x’, ‘_y’))
比起concat 操作,merge 的重要参数多了很多,简单介绍一下:
left、right:两个要合并的DataFrame
how:两个DataFrame 的连接方式,默认为inner,还有 outer、left、right三种
on:用于连接的列名称,若未指定,默认以两个DataFrame 的列名交集为连接键
left_on:左侧DataFrame 用于连接的列名
right_on:右侧DataFrame 用于连接的列名
left_index:使用左侧DataFrame 的行索引作为连接键
right_index:使用右侧DataFrame 的行索引作为连接键
sort:默认为True,将合并的数据进行排序
suffixes:指定左右DataFrame 存在相同列名时的后缀显示
解释一个,连接方式中多了left、right 两种连接。还记得上面的图吗?
其中,inner、outer、left、right分别表示:
inner:C部分(去重后)
outer:A+B+C部分(去重后)
left:A部分+(C部分)
right:B部分+(C部分)
注意:这里面说的表示哪一部分其实不太恰当,恰当的说法应该是以哪一部分为主去进行匹配,匹配到的填充值进去,匹配不到的填充NA,注意一下。
在匹配的过程中可以左边是列名,右边是索引,进行匹配
pd.merge(df_data_1, df_data_2, left_on='key', right_index=True)
这种操作是完全可行的,
再比如,两个DataFrame 中都有Maths 这一列,匹配的时候可以通过suffixes 指定后缀显示
pd.merge(df_data_1, df_data_2, on='key', suffixes('_left', '_right'))
常用的操作基本就这些,足以应付日常数据的处理
这部分一定要记得活学活用
总结一下:
这节内容的重点还是挺唯一的:数据表连接匹配
有多少人在用Excel 做数据匹配的时候电脑卡死?只是因为他们不会今天的这些内容
再来回顾一下,一共有三种方法:
append:提供了行方向的拼接操作
concat:通过行拼接或列拼接进行内联或外联操作
merge:类似于SQL数据库操作,支持全四种连接类型
希望对你在数据处理过程中能有所帮助,有问题可以评论区留言或者加群交流噢。
我们下个系列见
写在后面的话
应该还有分组聚合这一块没有提到,也是一个很常用的技能,有兴趣的同学自己了解一下
今天就不多说了,大家有空多看看文章,能支持的就支持一下,暖男
在此谢过!
好巧啊,你也读到这了!
点个
在看
让小一看到你
《爱上Pandas》系列-你还在用VLookup吗?相关推荐
- Pandas系列(五):可视化绘图
Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas可视化绘图 1. Pandas绘图基本方法 2. plot模块 2.1 简单图表 2.1.1 绘图函数 2.1.2 进阶用 ...
- 爱上MVC3系列~分部视图中的POST
在PartialView中进行表单提交,有什么用呢,我来总结一下: 1 这个表单不只一个地方用到 2 可能涉及到异步的提交问题 这两种情况都有可能需要把表单建立在"分部视图"中,我 ...
- 一起学Pandas系列基础篇---loc和iloc
一起学Pandas系列基础篇-loc和iloc 一起学Pandas系列基础篇---loc和iloc 一起学Pandas系列基础篇---loc和iloc 本篇学习内容介绍 一.loc 1. 选择索引为0 ...
- 一起学Pandas系列基础篇---at和iat
一起学Pandas系列基础篇-数据选择之at和iat 一起学Pandas系列基础篇---at和iat 一起学Pandas系列基础篇---数据选择之at和iat 本篇学习内容介绍 一.at 1. 选择B ...
- Pandas系列教程:盛大开篇了!
前段时间,我已经在公众号为大家分享了Python数据分析 "三剑客" 之Numpy的系列文章 ,受到了好多朋友的赞赏.这里在正式讲述Pandas之前,先带着大家回顾一下10篇Num ...
- Pandas系列(三):数据清洗
Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas数据清洗 1. 空值.缺失值处理 1.1 空值.缺失值判断 1.2 空值处理 2. 异常数据替换 2.1 条件替换 2.2 ...
- pandas系列之index小记
pandas系列之index 1.1 重置索引 常见索引drop用法 import pandas as pd # 数据准备 df = pd.DataFrame(np.arange(20).reshap ...
- Pandas系列(一):数据结构(Series、DataFrame、时间序列)
Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas数据结构 1. Series 1.1 简介 1.2 创建Series 1.3 Series属性 1.4 索引切片 1.4. ...
- [别被脱裤系列]2 还没深入数据库就浅出了
上一部分一起学习了数据库中的ACID等特性.数据库面试系列第二部分分享数据库的调优常用步骤,索引底层原理,页机制等.总体思维导图如下所示. 1 定位 主要从三个方面进行定位,用户的反馈,日志记录以及服 ...
最新文章
- 对学习编译原理的看法
- python支付程序源码_python项目中实现支付宝网页支付
- Asp.net 邮件传输(转)
- Windows Server 2008 R2之十一Windows Server Backup
- .NET 容器环境下创建应用 dump 文件
- python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类
- char添加一个字符_LINUX字符设备驱动模型分析(起始篇)
- VS2017更改设置目录一劳永逸的方法
- mysql空指针异常处理_mysql 查询空指针异常
- 邮件里直接显示图片_Python自动化:自动化发送邮件之SMTP
- java参考文献英文_java论文英文的参考文献
- 深信服桌面云的各种密码
- 网吧母盘网上精华+个人总结=超详细
- ACM里的生成函数初探
- 强推win10损害用户利益?这锅微软不背
- java里dialect_iBatis3基于方言(Dialect)的分页
- Sass与Compass——回顾
- 2018 年度阿里云存储十大新闻盘点篇 1
- 图像处理库中图片缩放参数分析
- Mat类常用的构造函数
热门文章
- 软件工程一位大三学生成功上大学的案例
- Flutter 混合开发 - 03 百度地图定位功能 ios 篇
- TongWeb及应用系统安全加固
- 你其实并不需要那么多的FaceBook账号
- 基于Tensorflow2 Lite在Android手机上实现时间序列温度预测(二)
- Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布
- screenfull全屏显示
- php网页有图片加载慢,网页加载加速 之 图片延迟加载
- 短路与和短路或的区别
- 战略支援部队信息工程大学的计算机类,战略支援部队信息工程大学2018年硕士研究生招生简章...