如何检测时间序列中的两类缺失值:整日期缺失与单日部分缺失
日期缺失检测方案
假设你的数据是带时间戳的结构化数据,用Pandas可以高效解决这个问题,不用写复杂循环:
1. 准备工作
先导入库并处理时间列:
import pandas as pd # 读取数据(替换成你的数据读取方式) df = pd.read_csv("your_data.csv") # 把时间列转为datetime类型,替换成你的实际列名 df['timestamp'] = pd.to_datetime(df['timestamp']) # 提取日期列,用于后续分组 df['date'] = df['timestamp'].dt.date
2. 找出整日期缺失的日期
# 获取数据中的首尾日期 min_date = df['date'].min() max_date = df['date'].max() # 生成该区间内的所有完整日期 full_date_range = pd.date_range(start=min_date, end=max_date).date # 对比找出完全没有数据的日期 missing_full_dates = set(full_date_range) - set(df['date'].unique()) print("整日期缺失的日期:", sorted(missing_full_dates))
3. 找出单日存在部分数据缺失的日期
情况A:单日有记录但部分字段值缺失
# 按日期分组,检查每组内是否存在空值 partial_missing_dates = df.groupby('date').apply(lambda x: x.isnull().any().any()).reset_index(name='has_missing') # 筛选出有缺失的日期 partial_missing_dates = partial_missing_dates[partial_missing_dates['has_missing']]['date'].tolist() print("单日部分字段缺失的日期:", partial_missing_dates)
情况B:单日数据按时段(比如小时)缺失
如果你的数据是按小时采集,需要检查单日是否覆盖全时段:
# 提取小时列 df['hour'] = df['timestamp'].dt.hour # 检查每组的小时是否覆盖0-23 def check_hour_coverage(group): present_hours = group['hour'].unique() return not set(range(24)).issubset(present_hours) hour_missing_dates = df.groupby('date').apply(check_hour_coverage).reset_index(name='hour_missing') hour_missing_dates = hour_missing_dates[hour_missing_dates['hour_missing']]['date'].tolist() print("单日时段缺失的日期:", hour_missing_dates)
内容的提问来源于stack exchange,提问作者Shivangi Taneja
相关产品推荐
相关产品推荐

