One - One Code All

Blog Content

pandas中DataFrame的连接操作join

Python 统计学-科学计算   2014-06-07 20:50:37

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时,不支持传递参数on,lsuffix,sort


实例

先创建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()



上一篇:通达信特别代码
下一篇:pandas.DataFrame根据条件新建列并赋值

The minute you think of giving up, think of the reason why you held on so long.