开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
数据的合并
数据合并主要包括下面两种操作:
轴向连接(concatenation):pd.concat()可以沿一个轴将多个DataFrame对象连接在一起,形成一个新的DataFrame对象。
融合(merging):pd.merge()方法可以根据一个或多个键将不同DataFrame中的行连接起来。
concat()函数可以将数据根据不同的轴进行合并。我们先看一下concat()的常用参数:
pd.concat(objs, axis=0, join='outer')- axis: 需要合并连接的轴,0是行,1是列,默认是0
- objs: series、dataframe 或者是 panel 构成的序列list
- join:连接的方式 inner,或者outer,默认是 outer
当concat()使用默认参数合并df1和df2时:
pd.concat(objs, axis=0, join='outer')
import pandas as pd
dict1 = {
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3'],
'C':['C0','C1','C2','C3']
}
df1 = pd.DataFrame(dict1)
dict2 = {
'B':['B0','B1','B2','B3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']
}
df2= pd.DataFrame(dict2)
print(df1)
print(df2)
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
B C D
0 B0 C0 D0
1 B1 C1 D1
2 B2 C2 D2
3 B3 C3 D3
pd.concat([df1,df2],join='outer')
pd.concat([df1,df2],axis=1,join='outer')
通过上面的结果可以发现,当join='outer',axis参数为0时,列进行并集处理,纵向表拼接,缺失值由 NaN 填充,并且会保留原有数据的行索引。代码片段pd.concat(objs, axis=0, join='outer')
01.如果两个表的index都没有实际含义,使用ignore_index参数,置true,重新整理一个新的index。
02.代码实现:pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)
03.当concat()的axis参数为1合并df1和df2时:
04.代码实现:pd.concat([df1,df2],axis=1,join='outer')
05.当join='outer',axis参数为1时,行进行并集处理,横向表拼接,缺失值由NaN填充。
当concat()的join参数为inner时合并df1和df2时:pd.concat([df1,df2],axis=0,join='inner')
通过上面的结果可以看出,如果为inner,得到的是两表的交集,如果是outer,得到的是两表的并集。
参数介绍
merge()函数通过指定连接键拼接列数据,我们先看一下
merge的常用参数:代码片段merge(left, right, how='inner', on=None)
- left和right:两个要合并的DataFrame
- how:连接方式,有inner、left 、 right 、 outer , 默为inner
- on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键.
left = pd.DataFrame({
'key':['a','b','b','d'],'data1':range(4)
})
right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)})
print(left)
print(right)
当merge()使用默认参数连接两个DataFrame时:pd.merge(left, right)
merge()默认做inner连接,并且使用两个DataFrame的列名交集(key)作为连接键,同样,最终连接的数据也是两个DataFrame key列数据的交集。代码片段pd.merge(left, right)
当两个DataFrame使用做outer连接时:pd.merge(left,right,on=['key'],how='outer')
当merge()做outer连接时最终连接的数据是两个DataFramekey列数据的并集,缺失的内容由NaN填充。
当两个DataFram使用left做连接时:pd.merge(left,right,on=['key'],how='left')
当merge()做left连接时,最终连接的数据将以left数据的链接键为准合并两个数据的列数据,缺失的内容由NaN填充
那么,当merge()做right连接时,最终的链接数据是什么样呢?运行下面的代码,验证你的想法:
pd.merge(left,right,on=['key'],how='right')