在合并数据的操作中,除了 concat() 函数,另一个常用的函数就是 merge() 了,这两个函数也经常被拿来比较,其实只要弄懂了函数中重要参数的作用理解了每个函数的用法,自然就知道在哪种情况下使用哪一个函数,需要对函数中的哪个参数进行怎样的设置了。
concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并。
concat(objs,axis=0,join=‘outer’,join_axes=None,ignore_index=False,keys=None,levels=None,names=None, …)
使用横向堆叠与外连接的方式进行合并
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'A':['A0','A0','A1'],
'B':['B0','B0','B1']})
print(df1)
'''
A B
0 A0 B0
1 A0 B0
2 A1 B1
'''
df2 = pd.DataFrame({'C':['C0','C0','C1','C3'],
'D':['D0','D2','D2','D3']})
print(df2)
'''
C D
0 C0 D0
1 C0 D2
2 C1 D2
3 C3 D3
'''
result = pd.concat([df1,df2],join='outer',axis=1)
print(result)
'''
A B C D
0 A0 B0 C0 D0
1 A0 B0 C0 D2
2 A1 B1 C1 D2
3 NaN NaN C3 D3
'''
使用纵向堆叠与内连接的方式进行合并
df1 = pd.DataFrame({'A':['A0','A1','A2'],
'B':['B0','B1','B2'],
'C':['C0','C1','C2']})
print(df1)
'''
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
'''
df2 = pd.DataFrame({'B':['B3','B4','B5'],
'C':['C3','C4','C5'],
'D':['D3','D4','D5']})
print(df2)
'''
B C D
0 B3 C3 D3
1 B4 C4 D4
2 B5 C5 D5
'''
print(pd.concat([df1,df2],join='inner',axis=0))
'''
B C
0 B0 C0
1 B1 C1
2 B2 C2
0 B3 C3
1 B4 C4
2 B5 C5
'''
在函数的官方文档里就有写到pd.merge()的作用是用数据库样式的连接合并DataFrame或者已命名的Series。
merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘x’, ‘y’), copy=True, indicator=False, validate=None)
left = pd.DataFrame({'key':['K0','K1','K2'],
'A':['A0','A1','A2'],
'B':['B0','B1','B2']})
print(left)
'''
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
'''
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
print(right)
'''
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K2 C2 D2
3 K3 C3 D3
'''
print(pd.merge(left,right))
'''
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
'''