You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查DataFrame中starttime与endtime列的缺失时间值

解决DataFrame中starttime/endtime列缺失时间值的问题

核心问题排查与修复步骤

1. 先确认时间列的类型有效性

首先必须保证starttime和endtime是标准的datetime64类型,否则无法和pd.date_range生成的时间序列匹配:

# 转换为datetime类型(若尚未转换)
allmerged['starttime'] = pd.to_datetime(allmerged['starttime'], errors='coerce')
allmerged['endtime'] = pd.to_datetime(allmerged['endtime'], errors='coerce')

# 检查是否有无效时间值(NaT)
print("starttime无效值数量:", allmerged['starttime'].isna().sum())
print("endtime无效值数量:", allmerged['endtime'].isna().sum())

2. 生成匹配粒度的完整时间序列

原代码未显式指定时间频率,默认是天级(freq='D'),但你需要的是小时级序列,必须明确指定:

# 生成2019-2022年每小时的完整时间序列
full_hourly_range = pd.date_range(
    start='2019-01-01 00:00:00',
    end='2022-12-31 23:00:00',
    freq='H'  # 强制小时级频率
)

3. 提取现有时间并对比缺失值

原代码错误地使用了allmerged.index,但你的时间值存在starttime/endtime列而非索引,需直接针对列操作:

# 检查starttime列的缺失时间
existing_starts = allmerged['starttime'].drop_duplicates()
missing_starts = full_hourly_range.difference(existing_starts)

# 检查endtime列的缺失时间
existing_ends = allmerged['endtime'].drop_duplicates()
missing_ends = full_hourly_range.difference(existing_ends)

4. 可视化缺失结果(可选)

将缺失值转为DataFrame方便查看:

missing_starts_df = pd.DataFrame({'缺失的starttime': missing_starts})
print(missing_starts_df.head(10))

原代码失效的常见原因

  • 索引不匹配:你误将DataFrame的默认数字索引当作时间索引,而实际时间值存在starttime/endtime列中
  • 频率不一致:未指定freq='H'导致生成的是天级序列,和你需要的小时级数据无法对齐
  • 时间格式错误:starttime/endtime中存在非标准时间字符串,转换时生成NaT无效值,干扰对比结果

内容的提问来源于stack exchange,提问作者J1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:23:13