前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas知识点-合并操作combine

Pandas知识点-合并操作combine

作者头像
Python碎片公众号
发布2021-07-21 17:12:12
1.9K0
发布2021-07-21 17:12:12
举报

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()方法。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 调用numpy中的函数
  • 2. 自定义实现combine_first()相同功能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档