当前位置: 代码网 > it编程>前端脚本>Python > pandas数据的合并concat()和merge()方式

pandas数据的合并concat()和merge()方式

2025年08月03日 Python 我要评论
import pandas as pd轴向连接(concatenation): pd.concat() 可以沿一个轴将多个dataframe对象连接在一起, 形成一个新的dataframe对象融合(m
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构成的序列list
  • axis: 需要合并链接的轴,0是行,1是列,默认是0
  • join:连接的方式 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'],
    'c': ['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 会报一个警告

abcd
0a0b0c0nan
1a1b1c1nan
2a2b2c2nan
3a3b3c3nan
0nanb0c0d0
1nanb1c1d1
2nanb2c2d2
3nanb3c3d3
  • 如果两个表的index都没有实际含义, 使用ignore_index参数置为 true, 重新生成一个新的index
pd.concat([df1,df2],axis=0,join='outer',ignore_index=true, sort=true) # 我没加 sort=true 会报一个警告
abcd
0a0b0c0nan
1a1b1c1nan
2a2b2c2nan
3a3b3c3nan
4nanb0c0d0
5nanb1c1d1
6nanb2c2d2
7nanb3c3d3

(2)join='outer',axis=1

  • 当join=‘outer’,axis参数为1时,行进行并集处理,横向表拼接,缺失值由nan填充

pd.concat([df1,df2],axis=1,join='outer', sort=true) # 我没加 sort=true 会报一个警告
abcbcd
0a0b0c0b0c0d0
1a1b1c1b1c1d1
2a2b2c2b2c2d2
3a3b3c3b3c3d3

(3) join=inner, axis=0

pd.concat([df1,df2],axis=0,join='inner',ignore_index=true)

bc
0b0c0
1b1c1
2b2c2
3b3c3
4b0c0
5b1c1
6b2c2
7b3c3

merge() 融合

merge(left, right, how='inner', on=none)

参数介绍

  • left和right, 两个要合并的dataframe(对应的左连接和右连接)
  • how: 连接的方式, 有inner(内连接)、left(左连接)、right(右连接)、outer(外连接), 默认为 inner
  • on: 指的是用于连接的列索引名称, 必须存在于左右两个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)
keydata1data2
0a00
1b11
2b21

outer (外连接)

  • 当merge()做outer连接时最终连接的数据是两个dataframekey列数据的并集,缺失的内容由nan填充
pd.merge(left,right,on=['key'],how='outer')

keydata1data2
0a0.00.0
1b1.01.0
2b2.01.0
3d3.0nan
4cnan2.0

left(左连接)

  • 当merge()做left连接时,最终连接的数据将以left数据的链接建为准合并两个数据的列数据,缺失的内容由nan填充

pd.merge(left,right,on=['key'],how='left')
keydata1data2
0a00.0
1b11.0
2b21.0
3d3nan

right (右连接)

  • 当merge()做right连接时,最终连接的数据将以right数据的链接建为准合并两个数据的列数据,缺失的内容由nan填充
pd.merge(left,right,on=['key'],how='right')
keydata1data2
0a0.00
1b1.01
2b2.01
3cnan2

应用场景

例如:

  • 现在有两张表格分别存储了9月和10月份的成交信息,
  • 那么这个时候我们就可以使用concat( )将两个表沿着0轴合并

例如:

  • 现在有两张表格,一个是成交信息,包含订单号、金额、客户id等信息;
  • 第二个是客户信息,包含客户id、姓名、电话号等信息,那么这个时候我们就可以使用merge()根据客户id将两个表合并成一个完整的表

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com