一、数据合并
数据合并主要包括两种操作:
- 轴向连接(concatenation):pd.concat()可以沿一个轴将多个DataFrame对象连接在一起,形成一个新的DataFrame对象
- 融合(merging):pd.merge()方法可以根据一个或多个键将不同的DataFrame中的行连接在一起
1. 轴向连接pd.concat
pd.concat()函数可以将根据不同的轴进行合并,常用参数如下:
pd.concat(objs,axis=0,join='outer')
- objs:Series、DataFrame或者是panel构成的序列list
- axis:需要合并链接的轴,0是行,1是列,默认为0
- join:连接的方式inner,或者outer,默认是outer
import pandas as pd
dict_1 = {
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3'],
'C':['C0','C1','C2','C3']}
df1 = pd.DataFrame(dict_1)
df1
A | B | C | |
---|---|---|---|
0 | A0 | B0 | C0 |
1 | A1 | B1 | C1 |
2 | A2 | B2 | C2 |
3 | A3 | B3 | C3 |
dict_2 = {
'B':['B0','B1','B2','B3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']}
df2 = pd.DataFrame(dict_2)
df2
B | C | D | |
---|---|---|---|
0 | B0 | C0 | D0 |
1 | B1 | C1 | D1 |
2 | B2 | C2 | D2 |
3 | B3 | C3 | D3 |
当使用pd.concat()默认参数合并df1和df2时:
df3 = pd.concat([df1,df2], axis=0, join='outer')
df3
A | B | C | D | |
---|---|---|---|---|
0 | A0 | B0 | C0 | NaN |
1 | A1 | B1 | C1 | NaN |
2 | A2 | B2 | C2 | NaN |
3 | A3 | B3 | C3 | NaN |
0 | NaN | B0 | C0 | D0 |
1 | NaN | B1 | C1 | D1 |
2 | NaN | B2 | C2 | D2 |
3 | NaN | B3 | C3 | D3 |
通过以上的结果发现,当join=‘outer’,axis参数为0时,列进行并集处理,纵向表拼接,缺失值由NaN填充,并且会保留原有数据的行索引。
如果两个表的Index都没有实际含义,使用ignore_index参数,设置成True,即可重新整理一个新的index。
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True
df4 = pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)
df4
A | B | C | D | |
---|---|---|---|---|
0 | A0 | B0 | C0 | NaN |
1 | A1 | B1 | C1 | NaN |
2 | A2 | B2 | C2 | NaN |
3 | A3 | B3 | C3 | NaN |
4 | NaN | B0 | C0 | D0 |
5 | NaN | B1 | C1 | D1 |
6 | NaN | B2 | C2 | D2 |
7 | NaN | B3 | C3 | D3 |
当我们将concat()的axis参数调整为1,合并df1和df2时:
df5 = pd.concat([df1,df2],axis=1,join='outer')
df5
A | B | C | B | C | D | |
---|---|---|---|---|---|---|
0 | A0 | B0 | C0 | B0 | C0 | D0 |
1 | A1 | B1 | C1 | B1 | C1 | D1 |
2 | A2 | B2 | C2 | B2 | C2 | D2 |
3 | A3 | B3 | C3 | B3 | C3 | D3 |
当我们将concat()的join参数调整为inner,合并df1和df2时:
df6 = pd.concat([df1,df2],axis=0,join='inner')
df6
B | C | |
---|---|---|
0 | B0 | C0 |
1 | B1 | C1 |
2 | B2 | C2 |
3 | B3 | C3 |
0 | B0 | C0 |
1 | B1 | C1 |
2 | B2 | C2 |
3 | B3 | C3 |
通过以上的结果可知:
- 如果join参数为inner,得到的是两表的交集;
- 如果join参数为outer,得到的是两表的并集。
2. 融合pd.merge()
pd.merge()的常用参数如下:
pd.merge(left,right,how='inner',on=None)
参数介绍:
- left和right:两个要合并的DataFrame
- how:连接方式,有inner、left、right、outer,默认为inner
- on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键
import pandas