pandas.core.resample.Resampler.interpolate # 最终 重采样器。interpolate ( method = '线性' , * , axis = 0 , limit = None , inplace = False , limit_direction = 'forward' , limit_area = None , downcast = _NoDefault.no_default , ** kwargs ) [来源] # 根据不同的方法在目标时间戳之间插入值。 首先将原始索引重新索引为目标时间戳(请参阅 参考资料),然后进行值core.resample.Resampler.asfreq()插值 。NaNDataFrame.interpolate() 参数: 方法str,默认“线性”要使用的插值技术。之一: '线性':忽略索引并将值视为等距。这是多索引支持的唯一方法。 “时间”:适用于每日数据和更高分辨率的数据,以插入给定的间隔长度。 'index', 'values':使用索引的实际数值。 'pad':使用现有值填充 NaN。 'nearest'、'zero'、'slinear'、'quadratic'、'cubic'、'barycentric'、'polynomial':传递给 scipy.interpolate.interp1d,而 'spline' 传递给 scipy.interpolate.UnivariateSpline。这些方法使用指数的数值。 “多项式”和“样条曲线”都要求您还指定一个阶数(int),例如 。请注意, Pandas 中的线性方法是指 Scipy 一阶样条 而不是 Pandas 一阶样条。df.interpolate(method='polynomial', order=5) 'krogh'、'piecewise_polynomial'、'spline'、'pchip'、'akima'、'cubicspline':类似名称的 SciPy 插值方法的包装。参见注释。 'from_derivatives':指 scipy.interpolate.BPoly.from_derivatives。 axis {{0 或 'index', 1 或 'columns', None}}, 默认 None沿其插补的轴。对于系列,此参数未使用,默认为 0。 限制int,可选要填充的连续 NaN 的最大数量。必须大于 0。 inplace布尔值,默认 False如果可能的话更新数据。 limit_direction {{'向前', '向后', '两者'}}, 可选连续的 NaN 将按此方向填充。 如果指定限制: 如果“method”为“pad”或“ffill”,则“limit_direction”必须为“forward”。 如果“method”为“backfill”或“bfill”,则“limit_direction”必须为“backwards”。 如果未指定“限制”: 如果“method”为“backfill”或“bfill”,则默认为“backward” 否则默认为“前进” 如果limit_direction为“forward”或“both”,则引发 ValueError方法是“backfill”或“bfill”。 如果limit_direction为“向后”或“两者”,则引发 ValueError方法是“pad”或“fill”。 limit_area {{ None , 'inside', 'outside'}}, 默认 None如果指定了 limit,则连续的 NaN 将用此限制填充。 None:无填充限制。 'inside':仅填充由有效值包围的 NaN(插值)。 'outside':仅填充有效值之外的 NaN(推断)。 downcast可选,'infer' 或 None,默认为 None如果可能的话,向下转换数据类型。 自 2.1.0 版本起已弃用。 ``**kwargs``可选要传递给插值函数的关键字参数。 返回: 数据框或系列指定频率处的插值。 也可以看看 core.resample.Resampler.asfreq返回新频率的值,本质上是重新索引。 DataFrame.interpolate使用插值方法填充 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 1.2 2023-03-01 07:00:00.800 1.4 2023-03-01 07:00:01.200 1.6 2023-03-01 07:00:01.600 1.8 2023-03-01 07:00:02.000 2.0 2023-03-01 07:00:02.400 2.2 2023-03-01 07:00:02.800 2.4 2023-03-01 07:00:03.200 2.6 2023-03-01 07:00:03.600 2.8 2023-03-01 07:00:04.000 3.0 Freq: 400ms, dtype: float64 请注意,序列在两个锚点 07:00:00和之间错误地增加07:00:02。