生成时间范围的小时间隔,补全指定时段内的缺失小时
补全日期内缺失小时并限定时间范围的解决方案
核心处理逻辑
- 将时间字段转换为标准
datetime格式,保证按日期、小时维度处理的准确性 - 针对每个独立日期,生成08:00 至 17:00的完整小时时间序列
- 通过左连接将原始数据与完整序列合并,自动补全缺失小时行,按需填充缺失值
示例实现(Python Pandas)
import pandas as pd # 1. 读取并预处理数据(假设原始数据包含datetime和数值列) df = pd.read_csv("your_data.csv") df["datetime"] = pd.to_datetime(df["datetime"]) # 转换为标准时间格式 # 2. 生成每个日期的目标时间范围完整序列 unique_dates = df["datetime"].dt.date.unique() full_time_list = [] for single_date in unique_dates: # 构造当日08:00到17:00的小时级时间点 start_time = pd.Timestamp(f"{single_date} 08:00:00") end_time = pd.Timestamp(f"{single_date} 17:00:00") hourly_seq = pd.date_range(start=start_time, end=end_time, freq="H") full_time_list.extend(hourly_seq) # 转为DataFrame用于合并 full_time_df = pd.DataFrame({"datetime": full_time_list}) # 3. 合并补全缺失小时 result_df = pd.merge(full_time_df, df, on="datetime", how="left") # 可选:填充缺失值(示例用0填充,也可根据需求用前向/后向填充) result_df["value"] = result_df["value"].fillna(0) print(result_df)
额外优化提示
- 若原始数据时间精度高于小时(含分钟/秒),先向下采样到小时:
df["datetime"] = df["datetime"].dt.floor("H") - 若需先过滤原始数据中超出08:00-17:00的记录:
df = df[(df["datetime"].dt.hour >= 8) & (df["datetime"].dt.hour <= 17)]
内容的提问来源于stack exchange,提问作者kirilb
相关产品推荐
相关产品推荐

