pandas与excel联动-pandas基础4-merge函数

前面合并两个DataFrame可以用concat函数,但concat本质上是在所有index上同时进行对齐合并。所以如果只要按index对齐,请使用concat方法。
如果想在任意列上对齐合并,则需要merge函数,这在sql应用很多。

pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort = False)

参数说明:

  • left,right: 两个要对齐合并的DataFrame;
  • how: 先做笛卡尔积操作,然后按照要求,保留需要的,缺失的数据填充NaN;取值:left/right/inner(交,以左DataFrame顺序为准)/outer(并,以字典序重新排序)
  • on:对应列名或者行索引的名字,如果要在DataFrame相同的列索引做对齐,用这个参数;
  • left_on, right_on, left_index, right_index:on对应列名或者行索引的名字(所以行索引一般要跟列一样看待,有自己的名字),用这俩参数;index对应要使用的index,不建议使用,会搞晕。
  • sort: True or False,是否按字典序重新排序。

单纯按照index对齐
区别就是,如果有重复的列名,merge会重命名,concat不会。

>>> df1 = pd.DataFrame([[1,2],[3,4]], index = ['a','b'],columns = ['A','B'])
>>> df2 = pd.DataFrame([[1,3],[4,8]], index = ['b','d'],columns = ['B','C'])
>>> df1
   A  B
a  1  2
b  3  4
>>> df2
   B  C
b  1  3
d  4  8
>>> pd.merge(left=df1, right=df2, how='inner', left_index=True, right_index=True)
   A  B_x  B_y  C
b  3    4    1  3
>>> pd.concat([df1,df2], join='inner', axis=1)
   A  B  B  C
b  3  4  1  3

on

# df1的B列b行,df2的B列d行,都是4,把这两行拉出来合并一下
>>> pd.merge(left=df1, right=df2, how='inner', on='B')
   A  B  C
0  3  4  8
# df1的A列和df2的C列比较,把相同的行拉出来,如果遇到列名重复,则重命名
>>> pd.merge(left=df1, right=df2, how='inner', left_on=['A'], right_on=['C'])
   A  B_x  B_y  C
0  3    4    1  3

how

# 保持left的DataFrame不变,用右侧来对齐,对不上的就填NaN
>>> pd.merge(left = df1, right = df2, how = 'left', on = ['B'] )
   A  B    C
0  1  2  NaN
1  3  4  8.0
# 保持right的DataFrame不变,用左侧来对齐,对不上的填NaN
>>> pd.merge(left = df1, right = df2, how = 'right', on = ['B'] )
     A  B  C
0  3.0  4  8
1  NaN  1  3

如果对齐的列存在重复值,就让它重复好了。操作逻辑仍然是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值