我刚刚了解到可以使用插值和填充来处理缺失数据/ NaN,我发现插值是一种估计类型,在已知一组离散数据点的范围内构造新的数据点的方法,而填充则是将缺失数据替换为该列的平均值。除此之外还有什么区别吗?何时最好使用它们中的每一个?
我刚刚了解到可以使用插值和填充来处理缺失数据/ NaN,我发现插值是一种估计类型,在已知一组离散数据点的范围内构造新的数据点的方法,而填充则是将缺失数据替换为该列的平均值。除此之外还有什么区别吗?何时最好使用它们中的每一个?
插值(线性)基本上是在两个给定点之间的直线,这两个点之间的数据点缺失:
来源:维基百科
首先,线性插值的公式如下:
(y1-y0) / (x1-x0)
假设我们有上面图表中的三个数据点:
df = pd.DataFrame({'Value':[0, np.NaN, 3]})
Value
0 0.0
1 NaN
2 3.0
我们可以看到第一行(蓝点)缺失。
因此根据上述公式:
(3-0) / (2-0) = 1.5
如果我们使用Pandas方法Series.interpolate
进行插值:
df['Value'].interpolate()
0 0.0
1 1.5
2 3.0
Name: Value, dtype: float64
对于更大的数据集,它将如下所示:
df = pd.DataFrame({'Value':[1, np.NaN, 4, np.NaN, np.NaN,7]})
Value
0 1.0
1 NaN
2 4.0
3 NaN
4 NaN
5 7.0
df['Value'].interpolate()
0 1.0
1 2.5
2 4.0
3 5.0
4 6.0
5 7.0
Name: Value, dtype: float64
当我们用 (算术)均值
来填补数据时,我们遵循以下公式:
sum(all points) / n
所以我们的第二个数据帧如下:
(1 + 4 + 7) / 3 = 4
所以,如果我们使用 Series.fillna
和Series.mean
来填充我们的数据框:
df['Value'].fillna(df['Value'].mean())
0 1.0
1 4.0
2 4.0
3 4.0
4 4.0
5 7.0
Name: Value, dtype: float64
我将回答你问题的第二部分,即何时使用哪种技术。我们根据用例使用两种技术。
插值:如果给出一个患有某种疾病(比如肺炎)的患者数据集,并且有一个称为体温的特征。因此,如果该特征存在空值,则可以用平均值替换它,即插值。
内插法:如果给出了一家公司的股票价格数据集,你知道每个周六和周日都是休息日。那么这些值就是缺失值。现在,可以通过周五值和周一值的平均值填充这些值,即内插法。
因此,您可以根据用例选择相应的技术。