如何检查时间序列数据中timestamp列的缺失小时数据?
确认小时数据缺失的问题
先通过计算验证差异:
- 你的时间跨度是2550天15小时,理论上应包含的小时数为:
2550*24 + 15 = 61215 - 实际数据行数为60288,远小于理论值,可确定存在小时级时间戳缺失
检查缺失具体小时的方法
以下是几种基于Pandas的实用操作:
方法1:生成完整时间序列对比
通过生成覆盖全范围的标准小时序列,和原数据对比找出缺失项:
import pandas as pd # 生成从最小到最大时间的完整小时级序列 full_hourly_range = pd.date_range(start=df1["Datetime"].min(), end=df1["Datetime"].max(), freq='H') # 提取原数据的时间戳并转为集合 existing_timestamps = set(df1["Datetime"]) # 找出不在原数据中的时间戳,即缺失的小时 missing_timestamps = [ts for ts in full_hourly_range if ts not in existing_timestamps] # 打印缺失的时间戳 print("缺失的小时时间戳:") for ts in missing_timestamps: print(ts)
方法2:用重采样标记缺失
利用resample按小时聚合,筛选出无数据的小时:
# 将Datetime设为索引(若未设置) df1 = df1.set_index("Datetime") # 按小时重采样,统计每个小时的记录数 hourly_record_count = df1.resample('H').size() # 筛选出记录数为0的小时,即为缺失的时间 missing_hours = hourly_record_count[hourly_record_count == 0].index # 查看结果 print("缺失的小时:") print(missing_hours)
方法3:通过时间差定位缺失点
计算相邻时间戳的间隔,找出间隔超过1小时的位置,定位缺失区间:
# 计算相邻时间戳的差值 time_intervals = df1["Datetime"].diff() # 找出间隔大于1小时的行 gap_indices = time_intervals > pd.Timedelta(hours=1) gap_data = df1[gap_indices] # 输出缺失区间的前后时间 print("缺失时间段的前后时间:") for idx, row in gap_data.iterrows(): prev_time = row["Datetime"] next_time = df1.loc[idx+1, "Datetime"] if idx+1 < len(df1) else None print(f"从 {prev_time} 到 {next_time} 之间存在缺失")
内容的提问来源于stack exchange,提问作者Fatema Islam Tania
相关产品推荐
相关产品推荐

