Pandas DataFrame (Merge、join)

Merge通过键拼接列

pandas提供了一个类似于关系数据库的连接(join)操作的方法<Strong>merge</Strong>,可以根据一个或多个键将不同的DataFrame中的行连接起来

语法为:

Merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False,
 right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)

用于通过一个或多个键将两个数据集的连接起来,类似于SQL的JOIN。该函数的典型应用场景是,针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表中。在此典型情况下,结果集的行数并没有增加,列数则为两个元数据的列数和减去连接键的数量。

参数说明:

left与right: 两个不同的DataFrame

how: 指的是合并(连接)的方式有inner(内连接)、left(左外连接)、right(右外连接)、outer(全外连接);默认为inner

on: 用于连接两个DataFrame的列索引名称。必须存在这两个数据库对象中,如果没有指定且其他参数也未指定,则以两个DataFrame的列名交集作为连接键。

left_on:  left这个DataFrame中用作连接键的列名。

right_on:  right这个DataFrame中用作连接键的列名。

left_index:  使用左边left这个DataFrame中的行索引作为连接键

right_index:  使用右边right这个DataFrame中的行索引作为连接键

sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能。

suffies:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列后面附加的后缀名称,默认为('_x', '_y')

copy:  默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能。

indicator:  显示数据来源情况;如只来自于左边(left_only)

df1 = pd.DataFrame({'key': ['a', 'b', 'b','d'], 'data1':range(4)})

df2 = pd.DataFrame({'key': ['a', 'b', 'c','d'], 'data2':range(4)})

pd.merge(df1, df2)                  # 没有指定连接键,默认用重叠列名,没有指定连接方式        
Out[18]: 
   data1 key  data2
0      0   a      0
1      1   b      1
2      2   b      1
3      3   d      3


pd.merge(df2, df1)
Out[19]: 
   data2 key  data1
0      0   a      0
1      1   b      1
2      1   b      2
3      3   d      3
pd.merge(df2, df1, how='left')      # 通过how,指定连接方式
Out[20]: 
   data2 key  data1
0      0   a    0.0
1      1   b    1.0
2      1   b    2.0
3      2   c    NaN
4      3   d    3.0
right = pd.DataFrame({'key1':['foo', 'foo', 'bar', 'bar'],
'key2':['one','one','one','two'],
'lval':[4, 5, 6, 7]})


left = pd.DataFrame({'key1':['foo', 'foo', 'bar'],
'key2':['one','two','one'],
'lval':[1, 2, 3]})
pd.merge(left, right, on = ['key1', 'key2'], how = 'outer')               # 多对多,连接产生的行的笛卡尔积,相当于数据库中的全连接
Out[24]: 
  key1 key2  lval_x  lval_y
0  foo  one     1.0     4.0
1  foo  one     1.0     5.0
2  foo  two     2.0     NaN
3  bar  one     3.0     6.0
4  bar  two     NaN     7.0

join

列拼接,主要用于索引上的合并

join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame

join(self,other,on=None,how='left',  lsuffix='', sort=False)

其中参数的意义与merge方法基本相同,只是join方法默认为左外连接how=left,通过lsuffix='', rsuffix=''区分相同列名的列


 

猜你喜欢

转载自blog.csdn.net/weixin_38706928/article/details/80332162