如何用Python验证全年数据集是否覆盖所有月份的每一天
校验全年日期覆盖完整性的Python实现
核心逻辑:将数据集里的年月日转为标准日期格式去重后,和目标年份的完整合法日期集合做差集比对,即可100%准确判断是否有缺失,还能直接输出缺失的具体日期。
前提说明
- 你提到的数据集
earth2019默认是Pandas DataFrame格式 - 已安装Pandas库,没有的话执行
pip install pandas安装
完整代码
import pandas as pd # 1. 从数据集提取已有日期并去重 earth2019['date'] = pd.to_datetime(earth2019[['year', 'month', 'day']]) exist_dates = set(earth2019['date'].dt.date.unique()) # 2. 生成目标年份的全部合法日期(自动处理闰年、大小月,不需要手动计算每月天数) target_year = earth2019['year'].iloc[0] # 取数据集中的年份,固定为2019也可以直接写2019 full_dates = set(pd.date_range(start=f'{target_year}-01-01', end=f'{target_year}-12-31').date) # 3. 比对得到缺失日期 missing_dates = full_dates - exist_dates # 4. 输出结果 if len(missing_dates) == 0: print("✅ 数据完整,覆盖全年每一天的观测数据") else: print(f"❌ 数据存在缺失,共缺失{len(missing_dates)}天,缺失日期如下:") for d in sorted(missing_dates): print(d)
可选优化:可视化补充校验
如果还是需要用图表直观确认,可以改用散点图代替折线图,效果会清晰很多:
import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(10, 6)) # 只保留唯一日期避免重复点污染图表 unique_dates = earth2019[['month', 'day']].drop_duplicates() ax.scatter(unique_dates['month'], unique_dates['day'], s=10) ax.set_xlabel('月份') ax.set_ylabel('日期') ax.set_xticks(range(1,13)) ax.set_yticks(range(1,32)) plt.grid(alpha=0.3) plt.show()
内容的提问来源于stack exchange,提问作者Sylwia Kmiec
相关产品推荐
相关产品推荐

