![30391e54d9a6a5a24621297bf9fcda10.png](https://i-blog.csdnimg.cn/blog_migrate/67a2b8fae2c1b3f23736bf7d22e90574.jpeg)
前面讲了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](https://i-blog.csdnimg.cn/blog_migrate/1630525a298d0188cdd56c140f27197b.jpeg)
join()的调用
![c98f184fec6c34b644867aa45287464e.png](https://i-blog.csdnimg.cn/blog_migrate/2af6be1c3911a4967e22464cdf52bc71.jpeg)
可以看出join()是横向拼接,缺省以左侧表格为主,以NaN填充补位。
下面的调用会干净一些。
![de45e3e6665a606c7013388517b64f69.png](https://i-blog.csdnimg.cn/blog_migrate/6d77f0825bd93300d26f2a1e81f6cc67.jpeg)
join()和merge()一样,支持how的四种模式:inner, left, right, outer,其实join()就是merge()的一种封装,后台调用的正是merge()。只是为了调用更为简单,才有了join()。
join()的调用和四种模式大家可以自行练习。
concat, merge()和join()的对比
通过上面join()的例子我们可以看出,通过concat和merge的调用,我们都可以得到上面的结果。那么,它们之间的区别在哪儿?在什么样的场合调用哪个方法更好呢?
merge()和join()的对比
上图join()的运行结果通过merge()的调用是这样的:
![02a24d21261159f60180afd6148ca062.png](https://i-blog.csdnimg.cn/blog_migrate/4266ee3180c6ef41e250ad1aca6b1f01.jpeg)
可以看出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](https://i-blog.csdnimg.cn/blog_migrate/e2d66301781bee61571f3516c41dd390.jpeg)