数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧!

1.concat()

concat() 可用于两个及多个 DataFrame 间行/列方向进行内联或外联拼接操作,默认对行(沿 y 轴)取并集。

使用方式

pd.concat(objs: Union[Iterable[~FrameOrSeries], Mapping[Union[Hashable, NoneType], ~FrameOrSeries]],axis=0,join='outer',ignore_index: bool = False,keys=None,levels=None,names=None,verify_integrity: bool = False,sort: bool = False,copy: bool = True,
)

主要参数

  • objs:一个序列或是Series,DataFrame对象的映射。
  • axis:连接的轴,0(‘index’,行),1(‘columns’,列),默认为0。
  • join:连接方式 ,inner(交集), outer(并集),默认为outer。
  • ignore_index:是否重置串联轴的索引值。如果为True,则重置索引为0,…, n - 1。
  • keys:创建层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
  • names:生成的分层索引中级别的名称。

示例

创建两个 DataFrame

df1 = pd.DataFrame({'char': ['a', 'b'],'num': [1, 2]})
df2 = pd.DataFrame({'char': ['b', 'c'],'num': [3, 4]})

concat() 默认会对行方向进行拼接操作,连接方式 outer

pd.concat([d1, d2])

清除现有索引并重置索引。

pd.concat([d1, d2],ignore_index=True)

通过 keys 参数在数据的最外层添加分层索引。

pd.concat([d1, d2],keys=['d1', 'd2'])

指定 names 参数来标记创建的索引键。

pd.concat([d1, d1],keys=['d1', 'd2'],names=['DF Name', 'Row ID'])

将两个 DataFrame 与重叠的列进行组合并返回所有内容。 交集外的列填充 NaN

df3 = pd.DataFrame({'char': ['b', 'c'],'float': [3.0, 4.0]})
pd.concat([df1, df3])

将两个 DataFrame 与重叠的列进行组合,只返回重叠列的内容。

pd.concat([df1, df3],join="inner")

指定 axis=1 沿 x 轴水平组合 DataFrame 对象。

df4 = pd.DataFrame({'char': ['b', 'c', 'd'],'num': [3, 4, 5]},index=range(1, 4))
pd.concat([df1, df4], axis=1)

2.merge()

merge() 只能用于两个 DataFrame 间列方向进行内联或外联合并操作,默认列合并(沿 x 轴),取交集(即:以两个 DataFrame 列名的交集作为连接键)

使用方式

pd.merge(left,right,how: str = 'inner',on=None,left_on=None,right_on=None,left_index: bool = False,right_index: bool = False,sort: bool = False,suffixes=('_x', '_y'),copy: bool = True,indicator: bool = False,validate=None,
)

参数

  • left:DataFrame
  • right:DataFrame 或者带有 name 的Series
  • how:{‘left’, ‘right’, ‘outer’, ‘inner’}, 默认为 ‘inner’,连接的方式
  • on:用于连接的列索引名称,必须同时存在于左、右两个DataFrame中,默认是以两个DataFrame列名的交集作为连接键。
  • left_on:左侧DataFrame中用于连接键的列名,这个参数在左右列名不同但代表的含义相同时非常有用;
  • right_on:右侧DataFrame中用于连接键的列名
  • left_index:默认为False,不使用左侧DataFrame中的行索引作为连接键(但是这种情况下最好用JOIN)
  • right_index:默认为False,不使用右侧DataFrame中的行索引作为连接键( 但是这种情况下最好用JOIN)
  • sort:默认为False,将合并的数据进行排序,设置为False可以提高性能
  • suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(’_x’, ‘_y’)
  • copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能
  • indicator:显示合并数据中数据的来源情况
  • validate:{“one_to_one” or “1:1”, “one_to_many” or “1:m”, “many_to_one” or “m:1”, “many_to_many” or “m:m”}如果指定,则检查合并是否为指定类型。

示例

创建两个DataFrame

df1 = pd.DataFrame({'name': ['A1', 'B1', 'C1'],'grade': [60, 70, 80]})
df2 = pd.DataFrame({'name': ['B1', 'C1', 'D1'],'grade': [70, 80, 100]})

merge() 默认情况下,会根据两个 DataFrame 中同时存在的列进行合并,合并方法采用取交集的方式。

df1.merge(df2)

指定合并的方式为 outer,取并集。

df1.merge(df2, how='outer')

下面再创建两个 DataFrame

df1 = pd.DataFrame({'name1': ['A1', 'B1', 'B1', 'C1'],'grade': [60, 70, 80, 90]})
df2 = pd.DataFrame({'name2': ['B1', 'C1', 'D1', 'E1'],'grade': [70, 80, 90, 100]})

根据 name1name2 列合并 df1df2grade 列附加了默认后缀 _x_y

df1.merge(df2,left_on='name1',right_on='name2')

合并 df1df2,并将指定的左右后缀附加到重叠列末尾。

df1.merge(df2,left_on='name1',right_on='name2',suffixes=('_1', '_2'))

3.append()

append() 可用于两个及多个 DataFrame 间行方向(沿 y 轴)的拼接操作,默认取并集。

使用方式

df1.append(other,ignore_index=False,verify_integrity=False,sort=False)

参数

  • other : 指定要添加的数据。DataFrame 或 Series 对象,或这些对象的列表
  • ignore_index: 是否忽略索引,如果为 True,轴将被重置为 0, 1, …, n - 1。默认为False
  • verify_integrity:如果为 True,则在创建具有重复项的索引时引发 ValueError。默认为 False
  • sort : 如果 df1 和 other 的列未对齐,则对列进行排序。默认为 False。

示例

创建两个 DataFrame

df1 = pd.DataFrame([[1, 2], [3, 4]],columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]],columns=list('BC'))

append() 在默认情况下会沿y轴垂直拼接两个 DataFramedf1df2 交集外的列填充 NaN

df1.append(df2)

ignore_index 设置为 True,来达到重置轴的索引。

df1.append(df2, ignore_index=True)

4.join()

join() 用于两个及多个 DataFrame 间列方向(沿 x 轴)的拼接操作,默认左拼接。

使用方式

df1.join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False)
  • other:指定要添加的数据。DataFrame 或 Series 对象,或这些对象的列表
  • on:连接的列,默认使用索引连接
  • how:{‘left’, ‘right’, ‘outer’, ‘inner’}, 默认为 ‘left’,连接的方式
  • lsuffix:默认为空字符串,表示df1中重复列的后缀
  • rsuffix:other中重复列的后缀
  • sort:按照字典顺序对结果在连接键上排序。如果为False,连接键的顺序取决于连接类型(关键字)。

示例

创建两个 DataFrame

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3', 'A4'],'val': ['V0', 'V1', 'V2', 'V3', 'V4']})
df2 = pd.DataFrame({'B': ['B3', 'B4', 'B5'],'val': ['V3', 'V4', 'V5']})

如果我们想使用 val 列进行连接,我们需要将 val 设置为 df1df2 中的索引。

df1.set_index('val').join(df2.set_index('val'))

使用 val 列连接的另一个方法是指定 on 参数。 df1.join 只能使用 df2 的索引,但可以使用 df1 中的任何列。所以可以只将 df2 中的 val 列转为索引,并通过 on 参数指定 df1 的连接列为 val

df1.join(df2.set_index('val'),on='val')

使用外连接的方式连接 df1df2

df1.join(df2.set_index('val'),on='val',how='outer')

四种方法总结

  • concat() 可沿任意轴连接 Pandas 对象,并且可在串联轴上添加一层分层索引
  • join() 主要用于基于行索引进行列的拼接
  • merge() 使用数据库样式的连接合并,连接是基于列或索引。
  • 一般情况下 append(), join() 可以看成是 concat()merge()的简易版,参数较少,易用性比较强。


对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过下方小卡片联系作者,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!

搞懂Pandas数据合并,这一片就够了相关推荐

  1. 【Python】一文搞懂Pandas数据排序

    数据排序,是使用非常高频的功能,Pandas排序支持做的非常好,主要涉及两个函数,两种数据类型,组合起来四种情况. Series排序 Series.sort_index 索引排序 Series.sor ...

  2. tcga样本编号_数据挖掘专题 | 一文搞懂TCGA数据整理

    原标题:数据挖掘专题 | 一文搞懂TCGA数据整理 本文经授权转载自生信控 我们已经通过前两期数据下载(一)和数据下载(二)介绍了TCGA数据下载方法,并最终得到每个样本一个独立文件夹形式的数据,整理 ...

  3. PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 47784 pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYS

    PANDAS 数据合并与重塑(concat篇) 原创 2016年09月13日 19:26:30 标签: 47784 编辑 删除 pandas作者Wes McKinney 在[PYTHON FOR DA ...

  4. 【Python】图解Pandas数据合并:concat、join、append

    公众号:尤而小屋 作者:Peter 编辑:Peter 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数merge的使用,本文中介 ...

  5. 【python数据分析】pandas数据合并

    pandas数据合并 使用contact,append,merge完成数据集合并 自己学习用,欢迎大佬指正. 1.concat pd.concat()可以合并series和DataFrame对象,默认 ...

  6. pandas数据合并:concat、join、append

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 图解pandas数据合并:concat+join+append 在上一篇文章中介绍过pandas中最为常用的一个合并函数 ...

  7. pandas数据合并与重塑_PANDAS 数据合并与重塑(concat篇)

    pandas作者Wes McKinney 在[PYTHON FOR DATA ANALYSIS]中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的内容还只是冰 ...

  8. pandas 数据合并 pd.join() pd.merge() pd.crosstab() pd.concat()

    文章目录 pd.join() pd.merge() pd.merge(left, right, how='inner', left_on=None, right_on=None...)形式 按照一列进 ...

  9. pandas数据合并与重塑(concat篇)

    转载自:链接 pandas作者Wes McKinney 在[python for data anlysis]中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的 ...

最新文章

  1. Chrome 解决flash问题
  2. 三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统
  3. HTML+CSS+JS实现 ❤️ 团队人物图片蜂巢布局❤️
  4. JavaScript 读写 span标签的值 - 代码篇
  5. ActionItemBadge:在actionbar上显示badge数字提示
  6. mysql 唯一 标识符_mysql – 获取唯一标识符而不插入
  7. LoadRunner函数中文翻译
  8. 会考flash中文字变形为三角形_flash逐帧课件动画制作有哪些详细教程
  9. c语言语句结束的标准,C语言的语句要求以哪种符号结束?
  10. 【ML小结13】最大熵模型
  11. C/C++ Dev-cpp 5.4.0下载安装包,百度网盘
  12. 竞赛|阿里巴巴全球调度算法大赛
  13. 互联网、云计算之用户服务
  14. java ews appointment_ews-java-api学习:新建Recurring Appointment
  15. matlab一元线性回归及多元线性回归方程
  16. [在线挑战]【i春秋】渗透测试入门 —— 渗透测试笔记 --转
  17. 听说Python成为世界性语言了? Python是怎么构建世界?字符串在哪里?(三)
  18. #649 (Div. 2)D. Ehab‘s Last Corollary
  19. 通用表表达式实现 UPDATE/DELETE LIMIT
  20. fluke dtx-1800测试精度有必要进行原厂校准吗?

热门文章

  1. 全国二级c语言上机题库答案,二级C语言上机题库100题加答案
  2. 数学建模——拟合方法以及最小二乘优化问题(附黄河小浪底调水调沙例题)
  3. 计算机主板没电默认时间,主板电池没电了会出现什么情况
  4. sqlloader 插入默认值
  5. 设备巡检、点检记录解决方案
  6. Hadoop安装 搭建
  7. 专利申请的注意事项有哪些?
  8. Cadence Pspice添加外部白噪声
  9. UE4 插件Water系统
  10. python安装包下载太慢解决