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:00
和07:00:02
之间,序列正确地递减。