使用pandas将25Hz时序数据下采样到10Hz的索引选择及重采样方法咨询
问题1解答
你提到的pandas.TimedeltaIndex.seconds是TimedeltaIndex的属性,用来提取时间差的整秒数值,不是可用的索引对象。
你的场景是相对秒数的时序数据,直接使用pandas.TimedeltaIndex作为索引即可:把现有的time_in_seconds浮点数列转换为以秒为单位的时间差类型,作为DataFrame的索引就可以满足重采样要求。
问题2解答
重采样到10Hz等价于每100毫秒输出一个样本,你可以按以下步骤操作,同时得到时间和数值两列结果:
- 第一步:将时间列转为TimedeltaIndex并设置为数据集索引
- 第二步:按10Hz的窗口执行重采样,对
data_vals使用你需要的聚合规则(下采样常用均值、首样本、中位数等,示例中用均值聚合,可按需替换) - 第三步:将重采样后的TimedeltaIndex转换回浮点型的秒数,作为新的
time_in_seconds列
完整可运行代码示例:
import pandas as pd # 假设你已经把样例数据读取为df,列名为time_in_seconds、data_vals # 构造Timedelta索引 df.index = pd.to_timedelta(df['time_in_seconds'], unit='s') # 10Hz对应采样间隔100ms,写'resample(100ms)'和'resample(10Hz)'效果等价 # 这里用mean取窗口均值,可替换为first()/median()等符合你业务需求的聚合逻辑 resampled_df = df.resample('10Hz')['data_vals'].mean().reset_index() # 把Timedelta索引转回秒数的浮点值 resampled_df['time_in_seconds'] = resampled_df['index'] / pd.Timedelta(seconds=1) # 删掉多余的临时索引列 resampled_df = resampled_df.drop(columns=['index'])
如果需要保留原始时间戳而非窗口均值对应的时间,把聚合规则换成.first()即可直接取每个窗口第一个样本的时间和数值。
内容的提问来源于stack exchange,提问作者atomsmasher
相关产品推荐
相关产品推荐

