我有几个属于同一时间范围但采样率不同的时间序列。所有系列的开始和结束时间都相同。
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']
谢谢。
你可以使用 Pandas 和它的
resample
方法来标准化时间序列的采样率并进行插值。以下是如何操作:
import pandas as pd
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_a_data = [10, 12, 15, 18]
series_b_data = [20, 25, 26, 30]
series_c_data = [35, 32, 38, 42]
# 创建带有日期时间索引的 Pandas Series
series_a = pd.Series(series_a_data, index=pd.to_datetime(series_a_times))
series_b = pd.Series(series_b_data, index=pd.to_datetime(series_b_times))
series_c = pd.Series(series_c_data, index=pd.to_datetime(series_c_times))
# 将所有序列重新采样到每日频率并使用线性插值
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']
common_index = pd.to_datetime(series_times)
series_a_resampled = series_a.resample('D').interpolate(method='linear').reindex(common_index)
series_b_resampled = series_b.resample('D').interpolate(method='linear').reindex(common_index)
series_c_resampled = series_c.resample('D').interpolate(method='linear').reindex(common_index)
# 打印重新采样的序列
print(series_a_resampled)
print(series_b_resampled)
print(series_c_resampled)
这将输出以下内容:
2023-01-01 10.0
2023-01-02 11.0
2023-01-03 12.0
2023-01-04 15.0
2023-01-05 16.0
2023-01-06 17.0
2023-01-07 18.0
2023-01-08 18.0
Freq: D, dtype: float64
2023-01-01 20.000000
2023-01-02 21.666667
2023-01-03 23.333333
2023-01-04 25.000000
2023-01-05 26.666667
2023-01-06 28.333333
2023-01-07 30.000000
2023-01-08 30.000000
Freq: D, dtype: float64
2023-01-01 35.0
2023-01-02 32.0
2023-01-03 35.0
2023-01-04 38.0
2023-01-05 39.0
2023-01-06 40.0
2023-01-07 41.0
2023-01-08 42.0
Freq: D, dtype: float64
在这个代码中:
-
我们首先创建带有日期时间索引的 Pandas Series,以使用
pd.to_datetime
将时间字符串列表转换为日期时间对象。 -
然后,我们使用
resample('D')
方法将每个序列重新采样到每日频率。 -
我们使用
interpolate(method='linear')
应用线性插值以填充缺失值。 -
最后,我们使用
reindex
确保所有重新采样的序列都具有共同的索引,该索引由series_times
指定。
你可以选择适合你需求的任何其他插值方法来代替
linear
,例如
nearest
、
spline
或
polynomial
。有关可用选项的更多信息,请参阅 Pandas 文档。