如何为DataFrame的非等间隔时间序列填充分钟级重复值
如何为非等间隔时间步的DataFrame填充每分钟的重复值?
嘿,别纠结用while loop啦——pandas有更简洁高效的方法来搞定这个需求!咱们一步步来实现你要的效果:
步骤1:构造并预处理原始数据
首先,先模拟你的原始DataFrame(如果已经有现成的数据,直接跳过构造部分),然后把时间列转换成pandas能识别的datetime类型,并设置为索引:
import pandas as pd # 模拟你的原始数据 data = { 'datetime': ['02/06/2021 17:57', '02/06/2021 18:05', '02/06/2021 18:11', '02/06/2021 18:32', '02/06/2021 19:00'], 'value': [16.38, 25.89, 21.32, 12.65, 14.78] } df = pd.DataFrame(data) # 转换时间格式:这里的format对应你的时间字符串格式(日/月/年 时:分) df['datetime'] = pd.to_datetime(df['datetime'], format='%d/%m/%Y %H:%M') # 将时间列设置为DataFrame的索引 df = df.set_index('datetime')
步骤2:按分钟重采样并填充值
接下来用resample方法生成每分钟的时间序列,再用ffill()(前向填充)把每个时间步的数值延续到下一个时间点之前的所有分钟:
# 按1分钟频率重采样,并用前向填充补全空值 filled_df = df.resample('1min').ffill()
效果验证
执行完上面的代码后,你可以打印前10行看看效果:
print(filled_df.head(10))
输出会和你预期的完全一致:
value datetime 2021-06-02 17:57:00 16.38 2021-06-02 17:58:00 16.38 2021-06-02 17:59:00 16.38 2021-06-02 18:00:00 16.38 2021-06-02 18:01:00 16.38 2021-06-02 18:02:00 16.38 2021-06-02 18:03:00 16.38 2021-06-02 18:04:00 16.38 2021-06-02 18:05:00 25.89 2021-06-02 18:06:00 25.89
小提示
- 如果你的原始时间字符串格式不同,只需要调整
pd.to_datetime里的format参数即可(比如如果是月/日/年,就改成%m/%d/%Y %H:%M)。 - 这种方法比while loop高效太多,尤其是当你处理大数据量的时候,完全不用手动循环遍历每一分钟~
内容的提问来源于stack exchange,提问作者lunae_majicam
相关产品推荐
相关产品推荐

