在 Python 中使用插值来填充缺失的条目

插值是 Python 中的一种技术,可用于估计两个已知数据点之间的未知数据点。它通常用于使用已知值填充表或数据集中的缺失值。

插值是一种也用于图像处理的技术。扩展图像时,您可以使用相邻像素来估计新像素的像素值。

金融分析师还使用插值法,利用过去的已知数据点来预测金融未来。

在本教程中,我们将研究插值法来填充数据集中的缺失值。

Pandas Dataframe提供了.interpolate() 方法,您可以使用它来填充数据中缺失的条目。

让我们创建一些虚拟数据并看看插值是如何工作的。

对系列数据中的缺失值使用插值

让我们创建一个带有缺失值的Pandas系列。

import pandas as pd
import numpy as np
a=pd.Series([0, 1, np.nan, 3,4,5,7])

1. 线性插值

正如您所看到的,第二个索引的值为nan使用以下代码行对数据进行插值:

a.interpolate()

输出结果为。:

0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
5    5.0
6    7.0

Pandas 提供了多种插值方法。如果未指定任何内容,则线性插值是默认方法。

让我们尝试对相同数据进行另一种插值。

2. 多项式插值

多项式插值要求您指定阶数。让我们尝试使用阶数 2 进行插值。

a.interpolate(method='polynomial', order=2)

输出如下:

0    0.00000
1    1.00000
2    1.99537
3    3.00000
4    4.00000
5    5.00000
6    7.00000

如果在多项式插值中将阶数指定为 1,那么您将获得与线性插值相同的输出。这是因为 1 阶多项式是线性的。

a.interpolate(method='polynomial', order=1)

输出 :

0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
5    5.0
6    7.0

2.通过padding进行插值

通过填充进行插值意味着复制缺失条目之前的值。

使用填充插值时,您需要指定一个限制。该限制是该方法可以连续填充的最大 nan 数。

让我们看看它在 python 中是如何工作的。

a.interpolate(method='pad', limit=2)

我们得到的输出为:

0    0.0
1    1.0
2    1.0
3    3.0
4    4.0
5    5.0
6    7.0

缺失的条目将被替换为与之前的条目相同的值。

我们将限制指定为 2,让我们看看连续三个 nan 时会发生什么。

a=pd.Series([0, 1, np.nan, np.nan, np.nan, 3,4,5,7])
a.interpolate(method='pad', limit=2)

输出如下:

0    0.0
1    1.0
2    1.0
3    1.0
4    NaN
5    3.0
6    4.0
7    5.0
8    7.0

第三个 nan 保持不变。

Pandas DataFrame 中的插值

我们还可以使用插值来填充 pandas Dataframe 中的缺失值。

让我们创建一个虚拟 DataFrame 并对其应用插值。

s = pd.DataFrame([(0.0, np.nan, -2.0, 2.0), (np.nan, 2.0, np.nan, 1), (2.0, 5.0, np.nan, 9.0), (np.nan, 4.0, -3.0, 16.0)], columns=list('abcd'))
数据框

1. 使用 Pandas Dataframe 进行线性插值

要在数据帧上应用线性插值,请使用以下代码行:

s.interpolate()

输出 :

线性插值

这里b 列下的第一个值仍然是 nan,因为在它之前没有已知的数据点用于插值。

您还可以插入数据帧的各个列。

s['c'].interpolate()

输出 :

0   -2.000000
1   -2.333333
2   -2.666667
3   -3.000000

2.通过Padding进行插值

要应用填充方法,请使用以下代码行:

s.interpolate(method='pad', limit=2)

我们得到的输出为:

填充

结论

本教程是关于 Python 中的插值。我们主要关注使用 Pandas 进行插值来填充缺失数据。希望您和我们一起插值愉快!