Pandas按日期分组后出现异常日期的问题求助
排查与解决方案
1. 严格校验日期解析结果
虽然你指定了format='%d/%m/%Y',但仍需确认是否所有日期都被正确解析。可以运行以下代码检查解析后是否存在目标异常日期:
# 筛选出解析后等于'2023-12-04'的原始日期值 invalid_dates = mrgd_df[mrgd_df['Date'].dt.date == pd.to_datetime('2023-12-04').date()]['Date'].astype(str) print("原始数据中对应异常日期的记录:", invalid_dates.unique())
如果输出了类似['04/12/2023']的结果,说明部分数据的格式是%m/%d/%Y,和你指定的%d/%m/%Y冲突,导致解析错误。此时可以添加errors='coerce'强制转换错误格式的日期为NaT,再排查这些异常原始值:
mrgd_df['Date'] = pd.to_datetime(mrgd_df['Date'], format='%d/%m/%Y', errors='coerce') # 查看转换失败的行 print(mrgd_df[mrgd_df['Date'].isna()])
2. 检查groupby后的操作逻辑
异常日期可能不是来自原始数据,而是groupby之后的后续操作(比如重采样、填充、合并其他时间序列数据)生成的。请确认你的groupby代码是否包含以下操作:
- 使用
resample()对时间序列进行重新采样 - 调用
asfreq()生成固定频率的时间序列 - 合并了包含异常日期的其他DataFrame
- 使用
fillna()或reindex()时扩展了时间范围
如果存在上述操作,需要针对性检查这些步骤是否引入了额外日期。
3. 验证groupby分组结果
直接查看groupby后的分组键,确认异常日期是否真的来自分组:
# 获取所有分组的日期键 group_dates = [key[0] for key in mrgd_df.groupby(['Date', '另一列']).groups.keys()] print("分组中的所有日期:", pd.Series(group_dates).unique())
如果异常日期出现在这里,说明原始数据解析后确实存在该日期,回到第一步排查原始数据的格式问题;如果没有,说明异常日期是后续操作生成的。
内容的提问来源于stack exchange,提问作者Artem Gorbunov
相关产品推荐
相关产品推荐

