You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas秒级数据重采样为毫秒级并线性插值方法

报错根因

resample 方法仅支持DatetimeIndex、TimedeltaIndex或PeriodIndex类型的索引作为时间基准,当前DataFrame使用的是默认生成的RangeIndex(行号索引),timestamp仅作为普通列存在,未被设为索引,因此触发类型错误。

修复实现代码

前置索引修复

首先将已经转好时区的timestamp列设置为DataFrame的时间索引:

# 将timestamp列设为索引
df = df.set_index('timestamp')

毫秒级重采样+线性插值

设置好索引后即可执行重采样操作,注意需要先通过聚合/频率转换将Resampler对象转为实际DataFrame,再执行插值:

# 1毫秒分辨率实现
# asfreq()会直接保留原始秒级点位的数值,其余新增毫秒点位填充为NaN
df_interp = df.resample('1ms').asfreq().interpolate(method='linear')

如果同时间戳存在多条重复记录,可以把asfreq()替换为mean(),对同时间点的value取均值后再插值,逻辑更严谨。

低负载亚秒级方案

如果毫秒级数据量过大,可以调整重采样频率,只要频率小于1秒即可满足亚秒级精度要求,常用可选参数:

  • 100毫秒(0.1秒)分辨率:采样规则传'100ms',数据量仅为毫秒级的1/1000
  • 10毫秒(0.01秒)分辨率:采样规则传'10ms',数据量仅为毫秒级的1/100

以100毫秒分辨率为例,代码如下:

# 100毫秒低负载版本
df_interp = df.resample('100ms').asfreq().interpolate(method='linear')
注意事项

原始代码直接对Resampler对象调用interpolate是错误写法,必须先通过asfreq()/mean()/sum()等聚合/频率转换方法生成结构化的时间序列DataFrame,才能执行插值操作。

内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:57:20