插值和插补有什么区别?

ran*_*ent 6 python-3.x pandas

我刚刚了解到您可以通过插补和插值处理丢失的数据/ NaN,我刚刚发现插值是一种估计,一种在插补替换的同时在一组离散的已知数据点范围内构建新数据点的方法列均值的缺失数据。但还有比这更多的差异吗?何时是使用它们的最佳实践?

Erf*_*fan 10

插值

插值(线性)基本上是两个给定点之间的直线,这两个点之间的数据点缺失:

  • 已知两个红点
  • 缺少蓝点

来源:维基百科


好的解释,但给我看数据。

首先,线性插值的公式如下:

(y1-y0) / (x1-x0)
Run Code Online (Sandbox Code Playgroud)

假设我们有上图中的三个数据点:

df = pd.DataFrame({'Value':[0, np.NaN, 3]})

   Value
0    0.0
1    NaN
2    3.0
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,第 1 行(蓝点)丢失了。所以下面的公式来自上面:

(3-0) / (2-0) = 1.5
Run Code Online (Sandbox Code Playgroud)

如果我们使用 pandas 方法对这些进行插值Series.interpolate

df['Value'].interpolate()

0    0.0
1    1.5
2    3.0
Name: Value, dtype: float64
Run Code Online (Sandbox Code Playgroud)

对于更大的数据集,它将如下所示:

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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

插补

当我们用 对数据进行插补时(arithmetic) mean,我们遵循以下公式:

sum(all points) / n
Run Code Online (Sandbox Code Playgroud)

所以对于我们的第二个数据框,我们得到:

(1 + 4 + 7) / 3 = 4
Run Code Online (Sandbox Code Playgroud)

因此,如果我们用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
Run Code Online (Sandbox Code Playgroud)