pandas中DataFrame的连接操作:join

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)

结果如下:

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

 1. 通过索引连接DataFrame

>>> caller.join(other, lsuffix='_caller', rsuffix='_other')
  key_caller   A key_other    B
0         K0  A0        K0   B0
1         K1  A1        K1   B1
2         K2  A2        K2   B2
3         K3  A3       K99  B99
4         K4  A4       NaN  NaN
5         K5  A5       NaN  NaN

2. 通过指定的列连接DataFrame

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

>>> 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一致

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

3.其他连接方式

3.1右连接

>>> caller.join(other, how='right', lsuffix='_caller', rsuffix='_other')
  key_caller   A key_other    B
0         K0  A0        K0   B0
1         K1  A1        K1   B1
2         K2  A2        K2   B2
3         K3  A3       K99  B99

3.2外连接

>>> caller.join(other.set_index('key'), on='key', how='outer')
     key    A    B
0.0   K0   A0   B0
1.0   K1   A1   B1
2.0   K2   A2   B2
3.0   K3   A3  NaN
4.0   K4   A4  NaN
5.0   K5   A5  NaN
NaN  K99  NaN  B99

小结

  • DataFrame的join和数据库中join的效果一模一样
  • DataFrame的join默认为左连接
  • DataFrame的join连接时,caller的关键列默认为index,可以使用参数on指定别的列为关键列,但是other的关键列永远都是index,所有使用别的列为关键列是,常常使用set_index()

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值