结论:
一、Concat操作
函数:
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
1、aixs=0 行拼接,效果与obj1.append(obj2)是相同的
2、ignore_index=False 是否忽略索引而重建
3、join “inner”:列的交集 “outer”:列的并集
4、append函数
pd.append(other, ignore_index=False, verify_integrity=False, sort=None)
a、other其它dataframe
b、忽略索引
c、类似于pd.concat(axis=0)
案例:
>>>df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
>>>df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'E': ['C4', 'C5', 'C6', 'C7'],
'F': ['D4', 'D5', 'D6', 'D7']},
index=[2, 3, 10, 11])
>>>pd.concat([df1,df2]) # 并集 join
A B C D E F
0 A0 B0 C0 D0 NaN NaN
1 A1 B1 C1 D1 NaN NaN
2 A2 B2 C2 D2 NaN NaN
3 A3 B3 C3 D3 NaN NaN
2 A4 B4 NaN NaN C4 D4
3 A5 B5 NaN NaN C5 D5
10 A6 B6 NaN NaN C6 D6
11 A7 B7 NaN NaN C7 D7
>>>df.append(df2) # append操作,concat简略形式,只能在axis=0上进行合并
A B C D E F
0 A0 B0 C0 D0 NaN NaN
1 A1 B1 C1 D1 NaN NaN
2 A2 B2 C2 D2 NaN NaN
3 A3 B3 C3 D3 NaN NaN
2 A4 B4 NaN NaN C4 D4
3 A5 B5 NaN NaN C5 D5
10 A6 B6 NaN NaN C6 D6
11 A7 B7 NaN NaN C7 D7
>>>pd.concat([df1,df2],join='inner') # 交集 join
A B
0 A0 B0
1 A1 B1
2 A2 B2
3 A3 B3
2 A4 B4
3 A5 B5
10 A6 B6
11 A7 B7
>>>pd.concat([df1,df2],join='inner',ignore_index=True) # 重建索引 ignore_index
A B
0 A0 B0
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 B4
5 A5 B5
6 A6 B6
7 A7 B7
>>>pd.concat([df1,df2],axis=1,join_axes=[pd.Index([0,2])]) ### 索引相同的进行合并。
A B C D A B E F
0 A0 B0 C0 D0 NaN NaN NaN NaN
2 A2 B2 C2 D2 A4 B4 C4 D4
ps: join_axes表明需要留下的索引。
二、Merge操作
函数:
pd.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,
validate=None)
1、left:DataFrame对象
2、right:DataFrame对象
3、how:连接的方式inner、left、right、outer,默认为inner
4、on:用于连接的列名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键
5、left_on,right_on:指定左右两侧连接的列名
案例:
>>>left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
>>>right = pd.DataFrame({'key': ['K2', 'K3', 'K4', 'K5'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
>>>pd.merge(left, right, on='key',how='inner') # 按列key进行inner(交集)操作
A B key C D
0 A2 B2 K2 C0 D0
1 A3 B3 K3 C1 D1
>>>pd.merge(left, right, on='key',how='left') # 按列key进行left操作
A B key C D
0 A0 B0 K0 NaN NaN
1 A1 B1 K1 NaN NaN
2 A2 B2 K2 C0 D0
3 A3 B3 K3 C1 D1
PS:left以左边为基准,right以右边为基准
>>> pd.merge(left, right, on='key',how='outer') # 按列key进行outer操作
A B key C D
0 A0 B0 K0 NaN NaN
1 A1 B1 K1 NaN NaN
2 A2 B2 K2 C0 D0
3 A3 B3 K3 C1 D1
4 NaN NaN K4 C2 D2
5 NaN NaN K5 C3 D3
PS:以2边为基准
>>> pd.merge(left,right,left_on='A',right_on='B') #键名不同时的连接
三、Join操作
函数:
join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):
1、与merge功能类似,区别在于用于索引上的合并
案例:
>>>left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=['K0', 'K1', 'K2'])
>>>right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']},
index=['K0', 'K2', 'K3'])
>>>left.join(right) # 以索引,left关联
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 NaN NaN
K2 A2 B2 C2 D2
>>>left.join(right,how='outer') # 以索引,并集
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 NaN NaN
K2 A2 B2 C2 D2
K3 NaN NaN C3 D3
>>>left.join(right,how='inner') # 以索引,交集
A B C D
K0 A0 B0 C0 D0
K2 A2 B2 C2 D2
>>>pd.merge(left, right, left_index=True, right_index=True, how='outer') #merge索引并集
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 NaN NaN
K2 A2 B2 C2 D2
K3 NaN NaN C3 D3
>>>pd.merge(left, right, left_index=True, right_index=True, how='inner')#merge索引交集
A B C D
K0 A0 B0 C0 D0
K2 A2 B2 C2 D2
参考文献:
官方文档: http://pandas.pydata.org/pandas-docs/stable/merging.html