Pandas知识点-合并操作combine

Pandas知识点-合并操作combine

combine是联合的意思,在Pandas中,combine()方法也是一种实现合并的方法,本文介绍combine()方法的用法。
一、combine_first()实现合并
在介绍combine()方法前,先介绍比combine()更特殊的combine_first()方法。
在这里插入图片描述
combine_first(other): 对两个DataFrame进行联合操作,实现合并的功能,other参数传入被合并的DataFrame。
combine_first()方法根据DataFrame的行索引和列索引,对比两个DataFrame中相同位置的数据,优先取非空的数据进行合并。
如果调用combine_first()方法的df1中数据非空,则结果保留df1中的数据,如果df1中的数据为空值且传入combine_first()方法的df2中数据非空,则结果取df2中的数据,如果df1和df2中的数据都为空值,则结果保留df1中的空值(空值有三种: np.nan、None 和 pd.NaT)。
即使两个DataFrame的形状不相同也不受影响,联合时主要是根据索引来定位数据的位置。
二、combine()实现合并
在这里插入图片描述
combine(other, func): 对两个DataFrame进行联合操作,实现合并的功能。other参数传入被合并的DataFrame,func参数传入合并的规则函数,两个参数都是必传参数。
func函数的入参是两个Series,分别来自两个DataFrame(将DataFrame按列遍历),返回结果是一个合并之后的Series,在函数中实现合并的规则。
func可以是匿名函数、Python库中定义好的函数、或自定义的函数,要满足两个入参一个返回值,且入参和返回值是数组或Series。如上面的例子中,使用了匿名函数,合并规则为返回两个DataFrame中非空数据更多的列。原理如下图。
在这里插入图片描述
三、调用已有函数和自定义函数

  1. 调用numpy中的函数
    在这里插入图片描述

fmax()是numpy中实现的函数,用于比较两个数组,返回一个新的数组。返回两个数组中相同索引的最大值,如果其中一个数组的值为空则返回非空的值,如果两个数组的值都为空则返回第一个数组的空值。
这个函数很适合用于combine()方法中,当然还有很多现成的函数可以调用,按需调用即可。
2. 自定义函数实现combine_first()相同功能
在这里插入图片描述
自定义一个函数first_not_na()在合并时优先取非空的数据,这个函数实现的功能与combine_first(other)方法相同。
四、合并时填充空值
在这里插入图片描述
fill_value: 先用fill_value填充DataFrame中的空值,再按传入的函数进行合并操作。
fill_value会填充DataFrame中所有列的空值,而且是在合并之前先填充。
上面的例子中自定义了函数save_max(),合并时取同位置的最大值,原理如下图。
在这里插入图片描述
五、不处理缺少的列
在这里插入图片描述
overwrite: 如果调用combine()方法的DataFrame中存在的列,在传入combine()方法的DataFrame中不存在,则先在传入的DataFrame中添加一列空值。overwrite参数默认为True,如第四部分的例子中df4的填充原理如下。
在这里插入图片描述
如果将overwrite参数设置成False,则不会给传入combine()方法的DataFrame添加不存在的列,并且合并时不会处理调用combine()方法的DataFrame中多出的列,多出的列直接原样返回。原理如下图。
在这里插入图片描述
六、总结
同样是合并操作,相对于前面文章介绍的concat()、merge()、join()三个方法,combine()方法可以自定义合并的规则。当需要合并两个相似的数据集,且两个数据集里的数据各有一部分是目标数据时,很适合使用combine()方法。
例如其中一个DataFrame中的数据比另一个DataFrame中的数据多,但第一个DataFrame中的部分数据质量(准确性、缺失值数量等)不如第二个DataFrame中的高,就可以使用combine()方法。
以上就是Pandas联合方法combine()的介绍,如果需要本文代码,可以扫码关注公众号“Python碎片”,然后在后台回复“pandas15”关键字获取完整代码。想学习更多Python知识,记得扫码关注。

参考文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.combine.html

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小斌哥ge

非常感谢,祝你一切顺利。

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

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

打赏作者

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

抵扣说明:

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

余额充值