如何将不规则时间序列数据重采样为规则时间序列?
解决时间序列重采样调整间隔的问题
完全可以通过pandas来实现这个时间序列重采样的需求,下面是针对你给出的示例数据的具体实现步骤:
步骤1:准备并加载原始数据
首先我们把你提供的两个数据集转换成pandas能处理的结构,同时将时间戳列解析为datetime类型(这是时间序列处理的关键):
import pandas as pd # 模拟第一个数据集的数据 data1 = [ ("2020-01-01-01:00:00.00", 1), ("2020-01-01-01:00:00.30", 1), ("2020-01-01-01:00:00.60", 1), ("2020-01-01-01:00:00.90", 1), ("2020-01-01-01:00:01.20", 1), ("2020-01-01-01:00:01.50", 1), ("2020-01-01-01:00:01.80", 0), ("2020-01-01-01:00:02.10", 0), ("2020-01-01-01:00:02.40", 0), ("2020-01-01-01:00:02.70", 0), ] # 模拟第二个数据集的数据 data2 = [ ("2020-01-01-01:00:00.00", 1), ("2020-01-01-01:00:00.30", 1), ("2020-01-01-01:00:00.60", 0), ("2020-01-01-01:00:00.90", 0), ("2020-01-01-01:00:01.20", 0), ("2020-01-01-01:00:01.50", 0), ("2020-01-01-01:00:01.80", 0), ("2020-01-01-01:00:02.10", 0), ("2020-01-01-01:00:02.40", 0), ("2020-01-01-01:00:02.70", 0), ] # 转换为DataFrame并解析时间戳 df1 = pd.DataFrame(data1, columns=["time stamp", "value1"]) df1["time stamp"] = pd.to_datetime(df1["time stamp"], format="%Y-%m-%d-%H:%M:%S.%f") df2 = pd.DataFrame(data2, columns=["time stamp", "value2"]) df2["time stamp"] = pd.to_datetime(df2["time stamp"], format="%Y-%m-%d-%H:%M:%S.%f")
步骤2:设置时间索引并重采样
将时间列设置为DataFrame的索引,然后使用resample方法指定目标时间间隔(这里是400毫秒,即"400L"),再用ffill()(向前填充)来获取最近的原始值,这正好匹配你示例中的结果逻辑:
# 设置时间索引 df1 = df1.set_index("time stamp") df2 = df2.set_index("time stamp") # 重采样到400毫秒间隔,向前填充值 resampled_df1 = df1.resample("400L").ffill() resampled_df2 = df2.resample("400L").ffill() # 合并两个重采样后的数据集 final_df = pd.concat([resampled_df1, resampled_df2], axis=1).reset_index()
步骤3:调整输出格式(可选)
如果需要让时间戳的格式和你示例完全一致,可以格式化时间列:
final_df["time stamp"] = final_df["time stamp"].dt.strftime("%Y-%m-%d-%H:%M:%S.%f").str[:-4] # 截取到小数点后两位,匹配示例格式
运行完上面的代码后,final_df就是你想要的结果,输出的核心内容和你给出的目标数据集完全一致。
关键说明
resample("400L"):L代表毫秒单位,400L对应你需要的0.4秒间隔。如果要调整成其他间隔,比如1秒用"1S"、30秒用"30S"即可,非常灵活。ffill():全称forward fill,用最近的前一个有效值填充新生成的时间点。如果你的业务需要用后续值填充,可以换成bfill();如果需要线性插值补全,用interpolate(method="linear")就行,按需选择即可。
内容的提问来源于stack exchange,提问作者user8840929
相关产品推荐
相关产品推荐

