如何使用Python将10Hz高频采集的记录数据转换为1Hz低频数据
问题1解答
- 实现频率转换不是必须使用
resample函数,但resample是pandas提供的针对时间序列重采样的最高效工具,尤其你有百万级数据量的情况下,用它比手动分组实现逻辑更简单、执行速度更快。 - 不需要手动将时间戳转换为秒、分钟单位,但必须先将
start_timestamp列转换为pandas的datetime64类型,否则resample无法识别时间维度做聚合。你尝试的第一行代码逻辑是正确的,第二行resample('20L')的参数错误:20L代表20毫秒,和你需要的1秒(1Hz)间隔不符,直接用'1S'作为参数即可。
问题2解答
- 10Hz代表每秒生成10条数据,1Hz代表每秒生成1条数据,属于降采样操作,转换后数据量一定会减少,理论上最终数据量约为原始数据的1/10。
优化后的代码参考
import pandas as pd # 第一步先将时间列转换为datetime类型,这是resample运行的前提 df['start_timestamp'] = pd.to_datetime(df['start_timestamp']) # 降采样,仅保留需要的字段减少内存占用,处理完恢复索引 df_1hz = df[['start_timestamp', 'interpreted_value']].resample('1S', on='start_timestamp').mean().dropna().reset_index()
如果你不需要取每秒的均值,而是要取每秒首个值、末尾值、最大值等,把代码里的mean()替换为first()/last()/max()即可。
内容的提问来源于stack exchange,提问作者SSS
相关产品推荐
相关产品推荐

