如何将pandas DataFrame中8Hz采样的时间序列数据重采样为16Hz?
亚秒级时间序列8Hz转16Hz重采样实现方案
前置操作:正确解析时间索引
大多数重采样失败的核心原因是时间列的亚秒部分没有被正确解析,需要显式指定格式匹配微秒:
import pandas as pd # 解析时间列,%f 对应微秒部分 df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d %H:%M:%S.%f') # 将时间列设为索引 df = df.set_index('time')
如果原始数据的时间戳存在轻微偏移,没有严格对齐8Hz的时间格,可以先做一次对齐操作:
# 8Hz对应采样间隔为125000微秒(1e6微秒/8) df = df.resample('125000U').first()
上采样到16Hz
16Hz对应的采样间隔为62500微秒(1e6微秒/16),直接用该频率做重采样后插值补全缺失值即可,上采样常用线性插值,可根据业务需求替换为时间加权插值、样条插值等方法:
# 重采样到16Hz,线性插值补全 df_16hz = df.resample('62500U').interpolate(method='linear')
验证采样率
执行以下代码验证输出的采样率是否符合预期:
duration = (df_16hz.index[-1] - df_16hz.index[0]).total_seconds() sample_rate = len(df_16hz) / duration print(f"输出采样率:{sample_rate:.2f}Hz")
内容的提问来源于stack exchange,提问作者user5349
相关产品推荐
相关产品推荐

