数据清洗中如何确保年月序列连续?数据完整性校验咨询
月度时间序列数据连续性校验方案
我有两个月度时间序列数据集:
- 1982-01至2022-08的月度降雨天数数据
- 1982-01至2022-08的月度降雨量(mm)数据
降雨天数数据示例
month no_of_rainy_days 0 1982-01 10 1 1982-02 5 2 1982-03 11 3 1982-04 14 4 1982-05 10
降雨量数据示例
month total_rainfall 0 1982-01 107.1 1 1982-02 27.8 2 1982-03 160.8 3 1982-04 157.0 4 1982-05 102.2
作为数据完整性校验环节,如何确保日期序列连续?即1982-01的下一条应为1982-02而非跳至1982-03?不清楚该检查的执行方法,已在线搜索,请问默认假设年月连续是否为通用做法?
一、日期序列连续性的检查方法
用Python Pandas实现(最常用的时间序列处理方式)
- 转换日期格式:先把文本型的年月转换成日期类型,方便后续计算
import pandas as pd # 读取并转换降雨天数数据 df_days = pd.read_csv("rainy_days.csv") df_days['month'] = pd.to_datetime(df_days['month'], format='%Y-%m') # 读取并转换降雨量数据 df_rain = pd.read_csv("rainfall.csv") df_rain['month'] = pd.to_datetime(df_rain['month'], format='%Y-%m')
- 生成标准连续时间序列:根据数据集的起止时间,生成完整的月度序列作为参照
# 生成1982-01到2022-08的连续月度序列(MS代表每月第一天) full_date_range = pd.date_range(start='1982-01-01', end='2022-08-01', freq='MS') full_df = pd.DataFrame({'month': full_date_range})
- 对比找出缺失日期:通过集合对比,定位原数据中缺失的月份
# 检查降雨天数数据的缺失月份 missing_days = full_df[~full_df['month'].isin(df_days['month'])] print("降雨天数数据缺失的月份:") print(missing_days['month'].dt.strftime('%Y-%m')) # 检查降雨量数据的缺失月份 missing_rain = full_df[~full_df['month'].isin(df_rain['month'])] print("降雨量数据缺失的月份:") print(missing_rain['month'].dt.strftime('%Y-%m'))
- 相邻日期差校验:直接计算相邻行的月份差,判断是否为1个月
# 对降雨天数数据排序后计算月份差 df_days_sorted = df_days.sort_values('month') # 把年月转换成数字(如1982-01转为1982*12+1=23785),再计算差值 df_days_sorted['month_diff'] = (df_days_sorted['month'].dt.year * 12 + df_days_sorted['month'].dt.month).diff() # 筛选出差值不为1的行,即不连续的位置 non_continuous_days = df_days_sorted[df_days_sorted['month_diff'] != 1] print("降雨天数数据中不连续的位置:") print(non_continuous_days[['month', 'month_diff']])
用Excel实现(轻量场景)
- 把
month列转换成日期格式,新增列计算相邻日期差:=DATEDIF(A2,A3,"m"),返回值不为1的行就是不连续的位置 - 或者用
EDATE函数验证:=EDATE(A2,1)=A3,返回FALSE的行即为不连续的位置
二、关于"默认假设年月连续"的通用做法
绝对不能默认假设年月连续,这是数据校验的基本原则:
- 时间序列分析(趋势、季节性等)的准确性高度依赖数据连续性,缺失的月份会直接导致分析结果偏差
- 通用做法是主动校验连续性,而非默认连续——数据源可能存在采集遗漏、传输错误、格式转换丢失等问题,这些问题不会自动暴露
- 只有在数据源明确承诺100%连续(比如官方发布的完整月度统计数据,且有书面说明无缺失),才可以暂时简化校验,但仍建议做一次快速确认
内容的提问来源于stack exchange,提问作者ricenix
相关产品推荐
相关产品推荐

