pandas中DataFrame的连接操作:join

标签:pandas

pandas中的DataFrame变量的join连接总是记不住,在这里做一个小结,参考资料是官方文档

pandas.DataFrame.join

DataFrame.join(other, on=None, how=’left’, lsuffix=”, rsuffix=”, sort=False)

通过索引或者指定的列连接两个DataFrame。通过一个list可以一次高效的连接多个DataFrame。

参数说明

  • other:【DataFrame,或者带有名字的Series,或者DataFrame的list】如果传递的是Series,那么其name属性应当是一个集合,并且该集合将会作为结果DataFrame的列名
  • on:【列名称,或者列名称的list/tuple,或者类似形状的数组】连接的列,默认使用索引连接
  • how:【{‘left’, ‘right’, ‘outer’, ‘inner’}, default: ‘left’】连接的方式,默认为左连接
  • lsuffix:【string】左DataFrame中重复列的后缀
  • rsuffix:【string】右DataFrame中重复列的后缀
  • sort:【boolean, default False】按照字典顺序对结果在连接键上排序。如果为False,连接键的顺序取决于连接类型(关键字)。

注释

当需要join的数据是DataFrame的list时,不支持传递参数onlsuffixsort

实例

先创建join的两个DataFrame型变量

import pandas as pd

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

结果如下:

    A key
0  A0  K0
1  A1  K1
2  A2  K2
3  A3  K3
4  A4  K4
5  A5  K5
other = pd.DataFrame({'key':['K0', 'K1', 'K2','K99'], 'B':['B0', 'B1', 'B2', 'B99']})
print other

结果如下:

     B  key
0   B0   K0
1   B1   K1
2   B2   K2
3  B99  K99

1. 通过索引连接DataFrame

print caller.join(other, lsuffix='_caller', rsuffix='_other')

结果如下:

    A key_caller    B key_other
0  A0         K0   B0        K0
1  A1         K1   B1        K1
2  A2         K2   B2        K2
3  A3         K3  B99       K99
4  A4         K4  NaN       NaN
5  A5         K5  NaN       NaN

2. 通过指定的列连接DataFrame

2.1 先把该列设置为索引,然后再连接,需要同时设定caller和other的索引,连接结果的索引也是指定的列

print caller.set_index('key').join(other.set_index('key'))

结果如下:

      A    B
key         
K0   A0   B0
K1   A1   B1
K2   A2   B2
K3   A3  NaN
K4   A4  NaN
K5   A5  NaN

2.2. 通过on参数指定连接的列,DataFrame.join总是使用other的索引去连接caller,因此我们可以把指定的列设置为other的索引,然后用on去指定caller的连接列,这样可以让连接结果的索引和caller一致

print caller.join(other.set_index('key'), on='key')

结果如下:

    A key    B
0  A0  K0   B0
1  A1  K1   B1
2  A2  K2   B2
3  A3  K3  NaN
4  A4  K4  NaN
5  A5  K5  NaN
print caller.join(other.set_index('key'), on='key', how='inner')

结果如下:

    A key   B
0  A0  K0  B0
1  A1  K1  B1
2  A2  K2  B2

3.其他连接方式

3.1右连接

print caller.join(other, how='right', lsuffix='_caller', rsuffix='_other')

结果如下:

    A key_caller    B key_other
0  A0         K0   B0        K0
1  A1         K1   B1        K1
2  A2         K2   B2        K2
3  A3         K3  B99       K99

3.2外连接

print caller.join(other.set_index('key'), on='key', how='outer')

结果如下:

     A  key    B
0   A0   K0   B0
1   A1   K1   B1
2   A2   K2   B2
3   A3   K3  NaN
4   A4   K4  NaN
5   A5   K5  NaN
5  NaN  K99  B99

小结

  • DataFrame的join和数据库中join的效果一模一样
  • DataFrame的join默认为左连接
  • DataFrame的join连接时,caller的关键列默认为index,可以使用参数on指定别的列为关键列,但是other的关键列永远都是index,所有使用别的列为关键列是,常常使用set_index()
    原文作者:雪拉比
    原文地址: https://www.jianshu.com/p/2358d4013067
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞