python 重叠合并_除了数据合并与连接运算,还有重叠数据!3种python方法轻松处理...

一起学习,一起成长!

前言

数据处理是数据工程中的重要一环,关系到数据质量和数据应用的效果,以及最终数据价值的转化情况。比如,现在比较热门的机器学习、深度学习的应用,无论相关算法应用的价值有多高、有多火热,最终都离不开的就是基于数据的应用。所以,数据是前提。高质量数据是高价值应用的基础,数据处理则是保障数据质量的重要过程。在以往中,我们会发现这样的一种现象,大家更关注了数据呈现的结果,忽略了数据处理过程,只有从事相关工作的人清楚其在数据处理工作上耗费了多少的精力。其中能够实现数据处理的工具很多,比如Excel、SQL、MySQL、Hive SQL、Spark SQL、R语言、SPSS、SAS等,而本文选择的是使用python 语言。不用多说,python 在人工智能领域的应用被广泛认知,其中自然语言处理、图像识别等技术更是被应用,提供了房地产、金融、教育、医疗、自媒体、互联网等领域了众多解决方案。

关于python数据处理的场景及方法,小编分享了一些内容。而本文我们主要讨论的一个问题则:重叠数据问题的处理。

数据合并、轴向连接以及重叠数据问题构成数据组合的三个问题。小编过往分享了数据合并、轴向连接的数据处理解决方案,如果对其应用场景和具体的解决方案模糊不清楚,可以阅读相关文章进行了解,推荐如下:

python数据轴向连接:6种pandas方法及示例教你玩转轴向连接

python的5种索引合并数据集方法及其差别

接下来,小编针对数据组合中的重叠数据问题进行介绍以及相应的解决方案进行方法论上的分享。

应用场景

首先,我们先了解一下什么是重叠数据,比如说,全部索引或部分索引重叠的两个数据集。下面通过具体数据例子来了解重叠数据。小编使用python中的numpy创造了一些数据,具体如下:

In [103]:import numpy as np

In [104]:import pandas as pd

In [105]:from pandas import Series,DataFrame

In [106]: a=Series([np.nan,2.5,np.nan,3.5,4.5,np.nan],index=['f','e','d','c','b','a'])

In [107]: b=Series(np.arange(len(a),dtype=np.float64),index=['f','e','d','c','b','a'])

In [108]: a

Out[108]:

f NaN

e 2.5

d NaN

c 3.5

b 4.5

a NaN

dtype: float64

In [109]: b

Out[109]:

f 0.0

e 1.0

d 2.0

c 3.0

b 4.0

a 5.0

dtype: float64

从上述的例子中可以看到,我们创造的两个数据集,索引是完全相同的。为了下文中更好的进行效果比对,在这里将b数据集的最后一个值替换为NAN。具体操作如下:

In [110]: b[-1]=np.nan

In [111]: b

Out[111]:

f 0.0

e 1.0

d 2.0

c 3.0

b 4.0

a NaN

dtype: float64

解决方案

针对数据组合中的重叠问题,python拥有3种解决方案,具体我们会在下文逐一进行介绍。这里需要强调的一点是,3种解决方案没有好坏之分,实际应用中还要取决于需要解决业务及数据情况。

方案1: where函数

使用Numpy的where函数,它用于表达一种矢量化的if-else:

In [112]: np.where(pd.isnull(a),b,a)

Out[112]: array([ 0. , 2.5, 2. , 3.5, 4.5, nan])

对于这段代码“np.where(pd.isnull(a),b,a)”,有人可能不解,不知其具体发挥作用段内在逻辑。本质上段逻辑如如下所示:

if pd.isnull(a):

b

else:

a

如上解读,大家就会清楚知道,数据返回段逻辑,也从本质上认识了where函数是如何发挥作用的。

方案2: Series的combine_first方法

Series有一个combine_first方法,实现的也是一样的功能,而且会进行数据对齐:

In [113]: b[:-2].combine_first(a[2:])

Out[113]:

a NaN

b 4.5

c 3.0

d 2.0

e 1.0

f 0.0

dtype: float64

方案3:DataFrame的combine_first方法

对于DataFrame,combine_first自然也会在列上做同样的事情,因此可以将其看做:用参数对象中的数据为调用者对象的缺失数据“打补丁”:

In [114]: df1=DataFrame({'a':[1,np.nan,5,np.nan],'b':[np.nan,2,np.nan,6],

'c':range(2,18,4)})

In [115]: df2=DataFrame({'a':[5,4,np.nan,3,7],'b':[np.nan,3,4,6,8]})

In [116]: df1.combine_first(df2)

Out[116]:

a b c

0 1.0 NaN 2.0

1 4.0 2.0 6.0

2 5.0 4.0 10.0

3 3.0 6.0 14.0

4 7.0 8.0 NaN

总的来说,上述三种方法主要解决重叠数据问题。大家从例子中可以看出,其解决问题的方式简单易用,通过讲述对其内在逻辑以及本质有了进一步了解。希望大家在实践过程中多体会,如果喜欢,希望给予关注支持!感谢关注、阅读、转发!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值