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吗?相关推荐

  1. Pandas系列(五):可视化绘图

    Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas可视化绘图 1. Pandas绘图基本方法 2. plot模块 2.1 简单图表 2.1.1 绘图函数 2.1.2 进阶用 ...

  2. 爱上MVC3系列~分部视图中的POST

    在PartialView中进行表单提交,有什么用呢,我来总结一下: 1 这个表单不只一个地方用到 2 可能涉及到异步的提交问题 这两种情况都有可能需要把表单建立在"分部视图"中,我 ...

  3. 一起学Pandas系列基础篇---loc和iloc

    一起学Pandas系列基础篇-loc和iloc 一起学Pandas系列基础篇---loc和iloc 一起学Pandas系列基础篇---loc和iloc 本篇学习内容介绍 一.loc 1. 选择索引为0 ...

  4. 一起学Pandas系列基础篇---at和iat

    一起学Pandas系列基础篇-数据选择之at和iat 一起学Pandas系列基础篇---at和iat 一起学Pandas系列基础篇---数据选择之at和iat 本篇学习内容介绍 一.at 1. 选择B ...

  5. Pandas系列教程:盛大开篇了!

    前段时间,我已经在公众号为大家分享了Python数据分析 "三剑客" 之Numpy的系列文章 ,受到了好多朋友的赞赏.这里在正式讲述Pandas之前,先带着大家回顾一下10篇Num ...

  6. Pandas系列(三):数据清洗

    Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas数据清洗 1. 空值.缺失值处理 1.1 空值.缺失值判断 1.2 空值处理 2. 异常数据替换 2.1 条件替换 2.2 ...

  7. pandas系列之index小记

    pandas系列之index 1.1 重置索引 常见索引drop用法 import pandas as pd # 数据准备 df = pd.DataFrame(np.arange(20).reshap ...

  8. Pandas系列(一):数据结构(Series、DataFrame、时间序列)

    Pandas系列目录 文章目录 一. 简介 二. 思维导图 三. Pandas数据结构 1. Series 1.1 简介 1.2 创建Series 1.3 Series属性 1.4 索引切片 1.4. ...

  9. [别被脱裤系列]2 还没深入数据库就浅出了

    上一部分一起学习了数据库中的ACID等特性.数据库面试系列第二部分分享数据库的调优常用步骤,索引底层原理,页机制等.总体思维导图如下所示. 1 定位 主要从三个方面进行定位,用户的反馈,日志记录以及服 ...

最新文章

  1. 对学习编译原理的看法
  2. python支付程序源码_python项目中实现支付宝网页支付
  3. Asp.net 邮件传输(转)
  4. Windows Server 2008 R2之十一Windows Server Backup
  5. .NET 容器环境下创建应用 dump 文件
  6. python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类
  7. char添加一个字符_LINUX字符设备驱动模型分析(起始篇)
  8. VS2017更改设置目录一劳永逸的方法
  9. mysql空指针异常处理_mysql 查询空指针异常
  10. 邮件里直接显示图片_Python自动化:自动化发送邮件之SMTP
  11. java参考文献英文_java论文英文的参考文献
  12. 深信服桌面云的各种密码
  13. 网吧母盘网上精华+个人总结=超详细
  14. ACM里的生成函数初探
  15. 强推win10损害用户利益?这锅微软不背
  16. java里dialect_iBatis3基于方言(Dialect)的分页
  17. Sass与Compass——回顾
  18. 2018 年度阿里云存储十大新闻盘点篇 1
  19. 图像处理库中图片缩放参数分析
  20. Mat类常用的构造函数

热门文章

  1. 软件工程一位大三学生成功上大学的案例
  2. Flutter 混合开发 - 03 百度地图定位功能 ios 篇
  3. TongWeb及应用系统安全加固
  4. 你其实并不需要那么多的FaceBook账号
  5. 基于Tensorflow2 Lite在Android手机上实现时间序列温度预测(二)
  6. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布
  7. screenfull全屏显示
  8. php网页有图片加载慢,网页加载加速 之 图片延迟加载
  9. 短路与和短路或的区别
  10. 战略支援部队信息工程大学的计算机类,战略支援部队信息工程大学2018年硕士研究生招生简章...