pandas入门: 数据合并之--merge

pandas merge相关知识点总结。

  • 创建两个dataframe
df1 = pd.DataFrame({'A': [3, 4, 8, 9],
                   'B': [1.2, 2.4, 4.5, 7.3],
                   'C': ["aa", "bb", "cc", "dd"]})
df2 = pd.DataFrame({'B': [1.2, 2.2, 4.3, 7.3],
                   'C': ["ab", "bb", "cc", "dd"],
                    'D':[1, 2, 3, 4]})

结果如下:

   A    B   C
0  3  1.2  aa
1  4  2.4  bb
2  8  4.5  cc
3  9  7.3  dd
     B   C  D
0  1.2  ab  1
1  2.2  bb  2
2  4.3  cc  3
3  7.3  dd  4
  • 直接合并,采用默认的连接方式。默认采用inner连接方式,按照列名相同的列进行合并
result = pd.merge(df1, df2)

结果如下:

   A    B   C  D
0  9  7.3  dd  4
  • 指定on参数,以特定的列进行合并

on参数用于指定合并的基准列,按照设置的列名称进行合并,两个dataframe中除了on参数指定的列之外列名相同的列会变换名称后保留下来

result = pd.merge(df1, df2, on='B')

结果如下:

   A    B C_x C_y  D
0  3  1.2  aa  ab  1
1  9  7.3  dd  dd  4
  • how属性,指定连接方式

# innner: 默认的连接方式,共同的列必须完全相等

result = pd.merge(df1, df2, on='B', how='inner')

 结果如下:

   A    B C_x C_y  D
0  3  1.2  aa  ab  1
1  9  7.3  dd  dd  4

# outer: 共同列的值都会保留,两个dataframe在共同列上的差集,会对它们的缺失列项的值赋上NaN

result = pd.merge(df1, df2, on='B', how='outer')

结果如下:

     A    B  C_x  C_y    D
0  3.0  1.2   aa   ab  1.0
1  4.0  2.4   bb  NaN  NaN
2  8.0  4.5   cc  NaN  NaN
3  9.0  7.3   dd   dd  4.0
4  NaN  2.2  NaN   bb  2.0
5  NaN  4.3  NaN   cc  3.0

# left: 根据左边的dataframe确定共同列的保留值,右边缺失列的值赋为NaN

result = pd.merge(df1, df2, on='B', how='left')

结果如下:

   A    B C_x  C_y    D
0  3  1.2  aa   ab  1.0
1  4  2.4  bb  NaN  NaN
2  8  4.5  cc  NaN  NaN
3  9  7.3  dd   dd  4.0

# right: 根据右边的dataframe确定共同列的保留值,左边缺失列的值赋为NaN

result = pd.merge(df1, df2, on='B', how='right')

结果如下:

     A    B  C_x C_y  D
0  3.0  1.2   aa  ab  1
1  9.0  7.3   dd  dd  4
2  NaN  2.2  NaN  bb  2
3  NaN  4.3  NaN  cc  3
  • 多列合并
result = pd.merge(df1, df2, on=['B', 'C'], how='inner')

结果如下:

   A    B   C  D
0  9  7.3  dd  4
  • left_on 和 right_on

采用left_on 和 right_on对两个列名不同的dataframe合并

result = pd.merge(df1, df2, left_on='A', right_on='D', how='inner')

结果如下:

   A  B_x C_x  B_y C_y  D
0  3  1.2  aa  4.3  cc  3
1  4  2.4  bb  7.3  dd  4
  • 索引连接

采用left_index=True或者right_index=True使一个dataframe与另一个dataframe按照索引和列合并

如:df1的索引与df2的D列相同时合并

result = pd.merge(df1, df2, left_index=True, right_on='D')

结果如下:

   A  B_x C_x  B_y C_y  D
0  4  2.4  bb  1.2  ab  1
1  8  4.5  cc  2.2  bb  2
2  9  7.3  dd  4.3  cc  3
  • 相同的列重命名

采用suffixes属性为合并的两个dataframe的相同的列设置合并后相同列名的后缀

result = pd.merge(df1, df2, on='B', how='outer', suffixes=('_df1', '_df2'))

结果如下:

     A    B C_df1 C_df2    D
0  3.0  1.2    aa    ab  1.0
1  4.0  2.4    bb   NaN  NaN
2  8.0  4.5    cc   NaN  NaN
3  9.0  7.3    dd    dd  4.0
4  NaN  2.2   NaN    bb  2.0
5  NaN  4.3   NaN    cc  3.0

参考:

https://www.cnblogs.com/guxh/p/9451532.html

https://blog.csdn.net/Asher117/article/details/84725199

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值