多时间序列采样率标准化及插值工具咨询
时间序列统一采样率与插值工具推荐
我有若干处于同一时间范围但采样率不同的时间序列,所有序列的起止时间一致,示例时间戳如下:
series_a_times = ['2023-01-01', '2023-01-03', '2023-01-04', '2023-01-08'] series_b_times = ['2023-01-01', '2023-01-04', '2023-01-04', '2023-01-08'] series_c_times = ['2023-01-01', '2023-01-02', '2023-01-04', '2023-01-08']
需要将这些序列统一到目标采样时间,并按需插值:
series_times = ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08']
当然有合适的工具,Python的pandas库是处理这类时间序列标准化与插值的首选,操作便捷且支持多种插值方法。以下是具体实现步骤:
1. 数据预处理与格式转换
首先将原始时间戳转为pandas的DatetimeIndex,同时为每个序列绑定对应数值(假设你有对应的值序列)。注意series_b存在重复时间戳,需要先聚合处理(比如取均值、求和,根据业务需求选择):
import pandas as pd # 示例数值(替换为你的实际数据) series_a_vals = [10, 20, 30, 40] series_b_vals = [5, 15, 25, 35] series_c_vals = [100, 200, 300, 400] # 构造带时间索引的Series series_a = pd.Series(series_a_vals, index=pd.to_datetime(series_a_times)) series_b = pd.Series(series_b_vals, index=pd.to_datetime(series_b_times)) series_c = pd.Series(series_c_vals, index=pd.to_datetime(series_c_times)) # 处理series_b的重复时间戳(这里以取均值为例) series_b = series_b.groupby(series_b.index).mean()
2. 生成目标时间索引并统一采样
构造目标时间索引,然后用reindex结合插值方法填充缺失值:
# 生成目标时间索引 target_index = pd.to_datetime(series_times) # 统一采样并插值,支持linear(线性)、ffill(前向填充)、bfill(后向填充)等方法 series_a_resampled = series_a.reindex(target_index).interpolate(method='linear') series_b_resampled = series_b.reindex(target_index).interpolate(method='linear') series_c_resampled = series_c.reindex(target_index).interpolate(method='linear')
其他可选工具
如果更偏向底层数值计算,也可以用NumPy的interp函数,但需要手动处理时间戳到数值的转换,不如pandas高效。
内容的提问来源于stack exchange,提问作者Night Walker
相关产品推荐
相关产品推荐

