插值是 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 进行插值来填充缺失数据。希望您和我们一起插值愉快!