我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文讲述由pandas提供的两个dataframe对象合并merge的操作,当然因为series作为dataframe的子对象,也是属于被pandas.merge()的操作范围。

苏南大叔:python编程,解读pandas.merge()合并dataframe的join方式 - pandas-merge
python编程,解读pandas.merge()合并dataframe的join方式(图2-1)

大家好,这里是苏南大叔的“奥林匹克技术竞赛”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8pandas@1.1.5numpy@1.24.4

前文回顾

pandas除了本文的.merge()操作,还提供了.concat()操作,具体请参考:

本文所描述的pandas.merge()具有和数据库类似的inner joinouter joinleft joinright join的特性,所以,可以参考:

函数原型

python里面的pands.merge()函数原型:

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

参数说明:

参数默认说明
left、right要合并的DataFrame对象
howinner合并方式,可以是 'inner'(默认)、'outer'、'left' 或 'right'
on用于连接的列名,必须在两个DataFrame对象中都存在
left_on、right_on分别指定 left 和 right 的连接列
left_index 和、right_index如果为True,则使用左边或右边的行索引作为连接键
sortFalse合并后的数据按照连接键进行排序,改成True可能会增加开销
suffixes字符串元组,指定当左右DataFrame存在相同列名时,如何命名这些列
copyTrue始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此
indicator显示合并来源的信息

基础样本

import pandas as pd
df1 = pd.DataFrame({'a':['苏','南'],'b':['大','叔']})
df2 = pd.DataFrame({'a':['苏','su','南'],'c':['da','shu','哥']})
print(df1)
print(df2)

输出:

   a  b
0  苏  大
1  南  叔

    a    c
0   苏   da
1  su  shu
2   南    哥

苏南大叔:python编程,解读pandas.merge()合并dataframe的join方式 - join方式
python编程,解读pandas.merge()合并dataframe的join方式(图2-2)

默认inner join【交集】

inner join就是取leftright的交集。

res = pd.merge(df1, df2)
print(res)

输出:

   a  b   c
0  苏  大  da
1  南  叔   哥

这个就是leftright,使用了共同的列a进行默认的inner join得出的结果,求的是两者的交集。

how='outer'【合集】

res = pd.merge(df1, df2, how='outer')
print(res)

输出:

    a    b    c
0   苏    大   da
1   南    叔    哥
2  su  NaN  shu
注意,这里出现了一个空值NaN

how='left'【左连接】左边独有+交集

res = pd.merge(df1, df2, how='left')
print(res)

输出:

   a  b   c
0  苏  大  da
1  南  叔   哥

how='right'【右连接】右边独有+交集

res = pd.merge(df1, df2, how='right')
print(res)

输出:

    a    b    c
0   苏    大   da
1  su  NaN  shu
2   南    叔    哥
注意,这里也出现了一个缺失值NaN

indicator解释

对于这个join方式,理解其结果确实有些难度。但是这个函数官方出了一个参数indicator用于解释结果。虽然计算的时候可能用不到,但是人工理解数据结果还是挺好用的。

将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。_merge是分类类型,并且对于其合并键仅出现在左DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在右DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为both

比如:

res = pd.merge(df1, df2, how='right', indicator=True)
print(res)

输出:

    a    b    c      _merge
0   苏    大   da    both
1  su    NaN  shu    right_only
2   南    叔   哥    both

总结

因为这个函数的参数太多了,而且参数之间存在相互影响的关系。这里就先结合原有的内外链接,左右链接的概念,说一下leftrighthow三个参数。后续的文章再讨论剩下的参数的使用。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python