从CSV数据中查找并补全缺失的小时级时间间隔
我来帮你搞定这个补全小时粒度时间间隔的需求!针对你给出的CSV数据,用Python的pandas库就能高效解决,步骤很直观:
解决方案:补全CSV中缺失的小时粒度时间记录
步骤1:读取并预处理数据
首先读取CSV文件,把日期列转换成可处理的datetime格式,同时设置多级索引方便按id+city分组操作:
import pandas as pd # 替换成你的CSV文件路径 df = pd.read_csv('your_input.csv') # 解析日期列(匹配示例中的MM/DD/YYYY HH:MM:SS格式) df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y %H:%M:%S') # 设置id、city、date为多级索引 df = df.set_index(['id', 'city', 'date'])
步骤2:按组生成完整的小时时间序列
对每个(id, city)组合,生成该组时间范围内的所有小时节点,再和原数据合并,自动识别缺失项:
# 分组后为每个组生成连续的小时序列 full_time_df = df.groupby(['id', 'city']).apply( lambda group: group.reindex( pd.date_range( group.index.get_level_values('date').min(), group.index.get_level_values('date').max(), freq='H' # 1小时间隔 ) ) ).reset_index()
步骤3:填充缺失的id和city字段
生成完整时间序列后,id和city会出现空值,我们用组内的固定值填充:
# 按组向前填充id和city(每个组的id、city是唯一的) full_time_df[['id', 'city']] = full_time_df.groupby(['id', 'city'])[['id', 'city']].ffill() # 按需填充reading字段的空值,比如留空字符串或设为0 full_time_df['reading'] = full_time_df['reading'].fillna('') # 替换成0或其他默认值均可
步骤4:导出处理后的CSV
最后把补全好的数据保存到新文件:
full_time_df.to_csv('your_output.csv', index=False)
效果验证
针对你提供的示例数据,处理后会:
- 给
id=33, city=US-Ohio补上06/19/2011 03:00:00、04:00:00、05:00:00三条记录 - 给
id=34, city=US-NYC补上06/19/2011 07:00:00这条记录
所有补全的记录都会保留对应组的id和city值,reading字段按你设置的规则填充。
注意事项
- 如果你的CSV日期格式和示例不同,需要调整
pd.to_datetime中的format参数 - 可以根据实际需求修改
reading字段的填充值,比如用同组的均值填充(如果是数值型数据)
内容的提问来源于stack exchange,提问作者Rohil




