【python数据分析】数据如何进行合并

本文介绍了Pandas库中用于数据合并的两个关键函数:concat()和merge()。concat()函数支持轴向连接,可以沿行或列合并DataFrame,通过设置axis和join参数实现不同方式的拼接。merge()方法则根据指定键进行融合,提供了inner、left、right和outer四种连接方式。文中通过实例展示了不同参数组合下的合并效果,帮助理解这两者在数据处理中的应用场景。
摘要由CSDN通过智能技术生成

数据的合并

在拥有了数据基本筛选能力后,我们还要有更加nb的操作,接下来就学习如何利用Pandas合并多个DataFrame数据,以及筛选我们心仪的数据。在数据合并里面主要讲两个函数的用法

1️⃣Concat()函数

数据合并主要包括下面两种操作:

轴向连接(concatenation):
pd.concat():可以沿一个轴将多个DataFrame对象连接在一起,形成一个新的DataFrame对象。

concat()函数可以将数据根据不同的轴作进行合并。我们先看一下concat()的常用参数:
pd.concat(objs, axis=0, join=‘outer’)

  1. objs: series、dataframe或者是panel构成的序列list。
  2. axis: 需要合并链接的轴,0是行,1是列,默认是0。
  3. join:连接的方式 inner,或者outer,默认是outer。

先创建两个DataFrame对象

import pandas as pd
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)
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)

✨当concat()使用默认参数合并df1和df2时,合并结果:
在这里插入图片描述
通过上面的结果可以发现,当join=‘outer’,axis参数为0时,列进行并集处理,纵向表拼接,缺失值由NaN填充,并且会保留原有数据的行索引。

如果两个表的index都没有实际含义,使用ignore_index参数,置true,重新整理一个新的index。

✨当concat()的axis参数为1合并df1和df2时,合并结果:

012345
0A0B0C0B0C0D0
1A1B1C1B1C1D1
2A2B2C2B2C2D2
3A3B3C3B3C3D3

可以看出当join=‘outer’,axis参数为1时,行进行并集处理,横向表拼接,缺失值由NaN填充。

这种合并的方式,组合特别多,在这不做过多的演示,大家可以多动手,多尝试。

当concat()的join参数为inner时合并df1和df2时:

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

综合上面的结果可以得到:
如果为inner,得到的是两表的交集,如果是outer,得到的是两表的并集。

2️⃣merge()函数


融合(merging):pd.merge()方法可以根据一个或多个键将不同DataFrame中的行连接起来。

merge()函数通过指定连接键拼接列数据,我们先看一下merge的常用参数:

merge(left, right, how='inner', on=None)
1.left和right:两个要合并的DataFrame

2.how:连接方式,有inner、left、right、outer,默认为inner
3.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)

当merge()使用默认参数连接两个DataFrame时:

pd.merge(left, right)

✨效果

keydata2data1
0a00
1b11
2b12

merge()默认做inner连接,并且使用两个DataFrame的列名交集(key)作为连接键,同样,最终连接的数据也是两个DataFramekey列数据的交集。

当两个DataFram使用做outer连接时:

pd.merge(left,right,on=['key'],how='outer')

✨效果

keydata1data2
0a0.00.0
1b1.01.0
2b2.01.0
3d3.0NaN
4cNaN2.0

当merge()做outer连接时最终连接的数据是两个DataFramekey列数据的并集,缺失的内容由NaN填充。

pd.merge(left,right,on=['key'],how='left')
pd.merge(left,right,on=['key'],how='right')

上面这两个代码大家自行尝试

🚩上面我们了解两种合并数据的方式,初学者可能会感到迷惑,很容易混淆,那就举个例子:
例如: 现在有两张表格分别存储了9月和10月份的成交信息,那么这个时候我们就可以使用concat( )将两个表沿着0轴合并。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值