识别DataFrame datetime列不规则缺失日期并填充对应值
问题描述
我有一个基于实际数据的样本DataFrame,每行代表一次间隔约20分钟的测量记录,还包含其他列。样例数据如下:
datetime value 261 2022-10-21 02:00:13 0.164299 262 2022-10-21 02:20:12 0.163009 263 2022-10-21 02:40:14 0.162298 264 2022-10-21 03:00:12 0.162846 265 2022-10-24 08:46:38 1.788360 266 2022-10-24 09:06:47 1.442915 267 2022-10-24 09:27:28 1.246774 268 2022-10-24 09:46:58 0.194352
可以看到,2022-10-21 03:00:12和2022-10-24 08:46:38之间存在时间间隙。需要识别所有此类间隙(可能有多个),然后在这些位置填充对应的日期,并将value列设为NaN。
我目前尝试通过以下代码生成缺失日期:
# 计算两个日期之间的20分钟间隔数 periods = (df.iloc[265,0] - df.iloc[264,0]).total_seconds() / 60.0 / 20 # 生成填充间隙的日期 pd.date_range(df.iloc[264,0], df.iloc[265,0], periods=periods)
求完整的解决方案,预期输出如下(新行的具体分钟数仅作参考,无需完全一致):
datetime value 261 2022-10-21 02:00:13 0.164299 262 2022-10-21 02:20:12 0.163009 263 2022-10-21 02:40:14 0.162298 264 2022-10-21 03:00:12 0.162846 265 2022-10-21 03:20:00 NaN 266 2022-10-21 03:40:00 NaN ... n-4 2022-10-24 08:26:00 NaN n-3 2022-10-24 08:46:38 1.788360 n-2 2022-10-24 09:06:47 1.442915 n-1 2022-10-24 09:27:28 1.246774 n 2022-10-24 09:46:58 0.194352
完整解决方案
步骤1:标准化时间列并设置索引
先确保datetime列是正确的时间格式,再将其设为DataFrame的索引,这是后续批量处理时间间隙的基础:
import pandas as pd # 转换datetime列为datetime类型 df['datetime'] = pd.to_datetime(df['datetime']) # 设置为索引 df = df.set_index('datetime')
步骤2:按20分钟间隔重采样填充缺失值
使用resample方法按20分钟频率重采样,原有数据会被保留,缺失的时间点会自动生成,value列默认填充为NaN:
# 按20分钟间隔重采样,保留原始数据,缺失位置填充NaN df_resampled = df.resample('20T').asfreq()
这里的'20T'代表20分钟的时间频率,asfreq()方法会保留原有行的value值,所有间隙处的value自动设为NaN,同时自动识别并处理所有时间间隙,无需手动定位单个间隙。
步骤3:(可选)恢复原数据结构
如果需要将datetime从索引转回普通列,执行以下代码:
df_resampled = df_resampled.reset_index()
结果说明
- 重采样后的DataFrame会包含所有20分钟间隔的时间点,完全匹配预期输出的格式。
- 如果原数据包含其他列,
resample('20T').asfreq()会对这些列同步填充NaN,满足多列数据的处理需求。
内容的提问来源于stack exchange,提问作者imatiasmb
相关产品推荐
相关产品推荐

