本文主要是介绍pandas数据的合并concat()和merge()方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于...
import pandas as pd
- 轴向连接(concatenation):
pd.concat()
可以沿一个轴将多个DataFrame对象连接在一起, 形成一个新的Dataframe对象 - 融合(merging):
pd.merge()
方法可以根据一个或多个键将不同DataFrame中的行连接起来。
concat() 轴向连接
concat() 函数可以将数据根据不同的轴作进行合并
pd.concat(objs, axis=0, join='outer')
objs
: series、dataframe或者是panel构成的序列listaxis
: 需要合并链接的轴,0是行,1是列,默认是0join
:连接的方式 inner,或者outer,默认是outer
准备数据
dict1={ 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3']} df1=pd.DataFrame(dict1) print(df1) dict2={ 'B': ['B0', 'B1', 'B2', 'B3'], 'Cpython': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']} df2=pd.DataFrame(dict2) print(df2)
合并
join的值 inner
,得到的是两表的交集
,如果是outer
,得到的是两表的并集
(1) join='outer',axis=0
- 当join=‘outer’,axis参数为0时,列进行并集处理,纵向表拼接,缺失值由NaN填充,并且会保留原有数据的行索引
pd.concat([df1, df2], axis=0, join='outer', sort=True) # 我没加 sort=True 会报一个警告
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 |
- 如果两个表的index都没有实际含义, 使用
ignore_index
参数置为 true, 重新生成一个新的index
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True) # 我没加 sortjs=True 会报一个警告
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 |
(2)join='outer',axis=1
- 当join=‘outer’,axis参数为1时,行进行并集处理,横向表拼接,缺失值由NaN填充
pd.concat([df1,df2],axis=1,join='outer', sort=True) # 我没加 sort=True 会报一个警告
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 |
(3) join=inner, axis=0
javascriptpd.concat([df1,df2],axis=0,join='inner',ignore_index=True)
B | C | |
---|---|---|
0 | B0 | C0 |
1 | B1 | C1 |
2 | B2 | C2 |
3 | B3 | C3 |
4 | B0 | C0 |
5 | B1 | C1 |
6 | B2 | C2 |
7 | B3 | C3 |
merge() 融合
merge(left, right, how='inner', on=None)
参数介绍
- left和right, 两个要合并的DataFrame(对应的左连接和右连接)
how
: 连接的方式, 有inner(内连接)、left(左连接)、right(右连接)、outer(外连接), 默认为 inneron
: 指的是用于连接的列索引名称, 必须存在于左右两个DataFrame中, 如果没有指定且其他参数也没有指定,则两个DataFrame列名交集作为连接键
import pandas as pd left = pd.DataFrame({'key':['a','b','b','d'],'data1':range(4)}) print(left) right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)}) print(right)
key data1 0 a 0 1 b 1 2 b 2 3 d 3 key data2 0 a 0 1 b 1 2 c 2
inner(内连接)
- merge()默认做inner连接,并且使用两个DataFrame的列名交集(key)作为连接键,同样,最终连接的数据也是两个DataFramekey列数据的交集
pd.merge(left,right)
key | data1 | data2 | |
---|---|---|---|
0 | a | 0 | 0 |
1 | b | 1 | 1 |
2 | b | 2 | 1 |
outer (外连接)
- 当merge()做outer连接时最终连接的数据是两个DataFraTNBsGmekey列数据的并集,缺失的内容由NaN填充
pd.merge(left,right,on=['key'],how='outer')
key | data1 | data2 | |
---|---|---|---|
0 | a | 0.0 | 0.0 |
1 | b | 1.0 | 1.0 |
2 | b | 2.0 | 1.0 |
3 | d | 3.0 | NaN |
4 | c | NaN | 2.0 |
left(左连接)
- 当merge()做left连接时,最终连接的数据将以left数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充
pd.merge(left,right,on=['key'],how='left')
key | data1 | data2 | |
---|---|---|---|
0 | a | 0 | 0.0 |
1 | b | 1 | 1.0 |
2 | b | 2 | 1.0 |
3 | d | 3 | NaN |
right (右连接)
- 当merge()做right连接时,最终连接的数据将以right数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充
pd.merge(left,right,on=['key'],how='China编程right')
key | data1 | data2 | |
---|---|---|---|
0 | a | 0.0 | 0 |
1 | b | 1.0 | 1 |
2 | b | 2.0 | 1 |
3 | c | NaN | 2 |
应用场景
例如:
- 现在有两张表格分别存储了9月和10月份的成交信息,
- 那么这个时候我们就可以使用concat( )将两个表沿着0轴合并
例如:
- 现在有两张表格,一个是成交信息,包含订单号、金额、客户ID等信息;
- 第二个是客户信息,包含客户ID、姓名、电话号等信息,那么这个时候我们就可以使用merge()根据客户ID将两个表合并成一个完整的表
总结
这篇关于pandas数据的合并concat()和merge()方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!