left join和right join的区别_第017篇:Concat, Merge, Join的对比

30391e54d9a6a5a24621297bf9fcda10.png

前面讲了Concat、Merge,我先来简单介绍一下Join,再对这三种操作做一对比,以加深印象并在合适的时机使用合适的工具。

df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
                   'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})

other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
                      'B': ['B0', 'B1', 'B2']})

输出是这样的。

063837e211988ae3b16643226ca4002f.png

join()的调用

c98f184fec6c34b644867aa45287464e.png

可以看出join()是横向拼接,缺省以左侧表格为主,以NaN填充补位。

下面的调用会干净一些。

de45e3e6665a606c7013388517b64f69.png

join()和merge()一样,支持how的四种模式:inner, left, right, outer,其实join()就是merge()的一种封装,后台调用的正是merge()。只是为了调用更为简单,才有了join()。

join()的调用和四种模式大家可以自行练习。

concat, merge()和join()的对比

通过上面join()的例子我们可以看出,通过concat和merge的调用,我们都可以得到上面的结果。那么,它们之间的区别在哪儿?在什么样的场合调用哪个方法更好呢?

merge()和join()的对比

上图join()的运行结果通过merge()的调用是这样的:

02a24d21261159f60180afd6148ca062.png

可以看出merge()和join()都是横向拼接,都是以index或相同项进行拼接:

merge和join对比

方法相同点不同点
merge()DataFrame对象
横向拼接
以index或相同项拼接
join()同样有inner,left,right,outer缺省以左侧表格为主
参数较少,调用简单

相对于merge和join,concat与它们之间的差异来得更大。

concat是Pandas的方法,缺省是纵向拼接,这一点就和merge,join不同。虽然concat可以指定轴向axis=1来实现横向拼接。

其次,concat定位于数据的连接,这更多的停留在物理融合的层面,没有参与感。而merge则更深入地通过共同的index或是共同项,将两组数据从业务层面进行拼和。

所以在使用concat和merge时,大家要注意这两个方面。

分别总结一下这三种方法各自的特点:

merge()

  • merge()函数用于将DataFrame与其他数据以内部联接inner,外部联接outer,左联接left,右联接right的模式进行合并。
  • 以索引或共同列进行拼接。
  • 如果使用共同列进行拼接,则索引将被忽略。
  • 如果按索引进行合并,则索引将被合并为一个唯一索引。

join()

  • join()用于横向连接两个或更多个DataFrames。
  • 后台调用用的是merge,默认为按索引连接。
  • 按照索引或共同列进行拼接。
  • 默认为左连接,可以像merge一样指定参数为右连接,内连接和外连接。

concat()

  • 缺省为垂直连接两个或更多DataFrame和Series。
  • 通过指定axis参数可以实现横向连接。
  • 默认为外连接outer,可以通过join='inner'进行内连接操作。

有兄弟对这几种方法做了个表格,可以给大家做个参考。

8db4f5c309690036035d3bdca6bf0f08.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值