pandas.DataFrame.interpolate#

DataFrame.interpolate(method='linear', *, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, **kwargs)[源代码]#

使用插值方法填充 NaN 值。

请注意,对于具有 MultiIndex 的 DataFrame/Series,仅支持 method='linear'

参数:
methodstr, default ‘linear’

要使用的插值技术。可以是以下选项之一:

  • ‘linear’:忽略索引,并将值视为等间距。这是 MultiIndexes 上唯一支持的方法。

  • ‘time’:适用于每日及更高分辨率的数据,以插值给定时间间隔的长度。此方法根据观测值之间的时间间隔进行插值。

  • ‘index’:插值使用 DataFrame 索引的数值来线性计算缺失值。

  • ‘values’:基于 DataFrame 中的数值进行插值,并将它们视为沿索引等间距。

  • ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial’:传递给 scipy.interpolate.interp1d;而 ‘spline’ 传递给 scipy.interpolate.UnivariateSpline。这些方法使用索引的数值。‘polynomial’ 和 ‘spline’ 都需要您同时指定一个 order(int),例如 df.interpolate(method='polynomial', order=5)。请注意,Pandas 中的 slinear 方法指的是 Scipy 的一阶 spline,而不是 Pandas 的一阶 spline

  • ‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’:封装了同名的 SciPy 插值方法。请参阅 Notes

  • ‘from_derivatives’:指的是 scipy.interpolate.BPoly.from_derivatives

axis{{0 或 ‘index’, 1 或 ‘columns’, None}},默认 None

要进行插值的轴。对于 Series,此参数未使用,默认为 0。

limitint, optional

要填充的连续 NaN 的最大数量。必须大于 0。

inplacebool, default False

如果可能,请在原地更新数据。

limit_direction{{‘forward’, ‘backward’, ‘both’}}, optional, default ‘forward’

将在此方向上填充连续的 NaN。

limit_area{{None, ‘inside’, ‘outside’}}, default None

如果指定了 limit,则将在此限制条件下填充连续的 NaN。

  • None:无填充限制。

  • ‘inside’:仅填充被有效值包围的 NaN(插值)。

  • ‘outside’:仅填充有效值之外的 NaN(外插)。

**kwargsoptional

要传递给插值函数的关键字参数。

返回:
Series 或 DataFrame

返回与调用者相同的对象类型,在某些或所有 NaN 值处进行插值。

另请参阅

fillna

使用不同的方法填充缺失值。

scipy.interpolate.Akima1DInterpolator

分段三次多项式(Akima 插值器)。

scipy.interpolate.BPoly.from_derivatives

以 Bernstein 基表示的分段多项式。

scipy.interpolate.interp1d

对一维函数进行插值。

scipy.interpolate.KroghInterpolator

插值多项式(Krogh 插值器)。

scipy.interpolate.PchipInterpolator

PCHIP 一维单调三次插值。

scipy.interpolate.CubicSpline

三次样条数据插值器。

注意

‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’ 和 ‘akima’ 方法是对同名的相应 SciPy 实现的封装。这些方法使用索引的实际数值。有关它们的行为的更多信息,请参阅 SciPy 文档

示例

Series 中使用线性插值填充 NaN

>>> s = pd.Series([0, 1, np.nan, 3])
>>> s
0    0.0
1    1.0
2    NaN
3    3.0
dtype: float64
>>> s.interpolate()
0    0.0
1    1.0
2    2.0
3    3.0
dtype: float64

在 Series 中使用多项式插值或样条填充 NaN:‘polynomial’ 和 ‘spline’ 方法都需要您同时指定 order(int)。

>>> s = pd.Series([0, 2, np.nan, 8])
>>> s.interpolate(method="polynomial", order=2)
0    0.000000
1    2.000000
2    4.666667
3    8.000000
dtype: float64

使用线性插值向前(即向下)填充 DataFrame 的每一列。

注意列 ‘a’ 的最后一个条目如何被不同地插值,因为它后面没有用于插值的条目。注意列 ‘b’ 的第一个条目如何保持 NaN,因为它前面没有用于插值的条目。

>>> df = pd.DataFrame(
...     [
...         (0.0, np.nan, -1.0, 1.0),
...         (np.nan, 2.0, np.nan, np.nan),
...         (2.0, 3.0, np.nan, 9.0),
...         (np.nan, 4.0, -4.0, 16.0),
...     ],
...     columns=list("abcd"),
... )
>>> df
     a    b    c     d
0  0.0  NaN -1.0   1.0
1  NaN  2.0  NaN   NaN
2  2.0  3.0  NaN   9.0
3  NaN  4.0 -4.0  16.0
>>> df.interpolate(method="linear", limit_direction="forward", axis=0)
     a    b    c     d
0  0.0  NaN -1.0   1.0
1  1.0  2.0 -2.0   5.0
2  2.0  3.0 -3.0   9.0
3  2.0  4.0 -4.0  16.0

使用多项式插值。

>>> df["d"].interpolate(method="polynomial", order=2)
0     1.0
1     4.0
2     9.0
3    16.0
Name: d, dtype: float64