前言
数据处理是数据工程中的重要一环,关系到数据质量和数据应用的效果,以及最终数据价值的转化情况。比如,现在比较热门的机器学习、深度学习的应用,无论相关算法应用的价值有多高、有多火热,最终都离不开的就是基于数据的应用。所以,数据是前提。高质量数据是高价值应用的基础,数据处理则是保障数据质量的重要过程。在以往中,我们会发现这样的一种现象,大家更关注了数据呈现的结果,忽略了数据处理过程,只有从事相关工作的人清楚其在数据处理工作上耗费了多少的精力。
关于python数据处理的场景及方法,小编分享了一些内容。而本文我们主要讨论的一个问题则:重叠数据问题的处理。
数据合并、轴向连接以及重叠数据问题构成数据组合的三个问题。小编过往分享了数据合并、轴向连接的数据处理解决方案,如果对其应用场景和具体的解决方案模糊不清楚,可以阅读相关文章进行了解,推荐如下:
接下来,小编针对数据组合中的重叠数据问题进行介绍以及相应的解决方案进行方法论上的分享。
应用场景
首先,我们先了解一下什么是重叠数据,比如说,全部索引或部分索引重叠的两个数据集。下面通过具体数据例子来了解重叠数据。小编使用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
总的来说,上述三种方法主要解决重叠数据问题。大家从例子中可以看出,其解决问题的方式简单易用,通过讲述对其内在逻辑以及本质有了进一步了解。希望大家在实践过程中多体会,如果喜欢,希望给予关注支持!感谢关注、阅读、转发!