pandas.core.resample.Resampler.interpolate#

final Resampler.interpolate(method='linear', *, axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=<no_default>, **kwargs)[源代码][源代码]#

根据不同的方法在目标时间戳之间插值。

原始索引首先被重新索引到目标时间戳(参见 core.resample.Resampler.asfreq()),然后通过 DataFrame.interpolate() 进行 NaN 值的插值。

参数:
方法str, 默认 ‘linear’

要使用的插值技术。以下之一:

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

  • ‘time’: 适用于每日和更高分辨率的数据,以插值给定的间隔长度。

  • ‘index’, ‘values’: 使用索引的实际数值。

  • ‘pad’: 使用现有值填充NaN。

  • ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial’: 传递给 scipy.interpolate.interp1d,而 ‘spline’ 传递给 scipy.interpolate.UnivariateSpline。这些方法使用索引的数值。’polynomial’ 和 ‘spline’ 需要你同时指定一个 order`(整数),例如 ``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

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

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

限制int, 可选

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

inplace布尔值, 默认为 False

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

limit_direction{{‘forward’, ‘backward’, ‘both’}}, 可选

连续的 NaNs 将在这个方向上填充。

limit_area : {{None, ‘inside’, ‘outside’}}, 默认 None{{None, ‘inside’, ‘outside’}}, default None

如果指定了限制,连续的 NaN 将被此限制填充。

  • None: 没有填充限制。

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

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

downcast可选,’infer’ 或 None,默认为 None

如果可能,向下转换数据类型。

自 2.1.0 版本弃用.

**kwargs可选的

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

返回:
DataFrame 或 Series

在指定频率下的插值。

参见

core.resample.Resampler.asfreq

返回新频率下的值,本质上是一个重新索引。

DataFrame.interpolate

使用插值方法填充NaN值。

DataFrame.bfill

在重采样数据中向后填充NaN值。

DataFrame.ffill

前向填充NaN值。

注释

对于高频或非等间距的时间序列,带有时间戳的重索引后进行插值可能会导致信息丢失,如最后一个示例所示。

例子

>>> start = "2023-03-01T07:00:00"
>>> timesteps = pd.date_range(start, periods=5, freq="s")
>>> series = pd.Series(data=[1, -1, 2, 1, 3], index=timesteps)
>>> series
2023-03-01 07:00:00    1
2023-03-01 07:00:01   -1
2023-03-01 07:00:02    2
2023-03-01 07:00:03    1
2023-03-01 07:00:04    3
Freq: s, dtype: int64

通过提供2秒的周期时间,将数据帧下采样到0.5Hz。

>>> series.resample("2s").interpolate("linear")
2023-03-01 07:00:00    1
2023-03-01 07:00:02    2
2023-03-01 07:00:04    3
Freq: 2s, dtype: int64

通过提供500ms的周期时间,将数据框上采样到2Hz。

>>> series.resample("500ms").interpolate("linear")
2023-03-01 07:00:00.000    1.0
2023-03-01 07:00:00.500    0.0
2023-03-01 07:00:01.000   -1.0
2023-03-01 07:00:01.500    0.5
2023-03-01 07:00:02.000    2.0
2023-03-01 07:00:02.500    1.5
2023-03-01 07:00:03.000    1.0
2023-03-01 07:00:03.500    2.0
2023-03-01 07:00:04.000    3.0
Freq: 500ms, dtype: float64

在插值之前使用 asfreq() 进行内部重新索引会导致基于重新索引时间戳(锚点)的插值时间序列。确保原始序列中的所有可用数据点都成为锚点,因此它也适用于导致非对齐时间戳的重采样情况,如下例所示:

>>> series.resample("400ms").interpolate("linear")
2023-03-01 07:00:00.000    1.0
2023-03-01 07:00:00.400    0.2
2023-03-01 07:00:00.800   -0.6
2023-03-01 07:00:01.200   -0.4
2023-03-01 07:00:01.600    0.8
2023-03-01 07:00:02.000    2.0
2023-03-01 07:00:02.400    1.6
2023-03-01 07:00:02.800    1.2
2023-03-01 07:00:03.200    1.4
2023-03-01 07:00:03.600    2.2
2023-03-01 07:00:04.000    3.0
Freq: 400ms, dtype: float64

注意,在两个锚点 07:00:0007:00:02 之间,序列正确地递减。