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

如何解决pandas转换不一致日期格式时出现的datetime报错问题

混合格式日期转换报错解决方案

报错原因

你遇到的报错是因为数据集内同时存在%Y-%m-%d(年-月-日)和%Y-%d-%m(年-日-月)两类日期字符串,pd.to_datetime默认按年-月-日规则解析时,会把2010-22-1这类字符串中的22识别为月份,超出1-12的合法范围触发报错。

操作前置要求:先备份原始日期列,避免数据覆盖丢失

df['raw_date'] = df['date'].copy()

可选解决方案

方案1:低占比异常值处理

如果异常格式(年-日-月)的样本占比很低,可先跳过错误再单独修正:

  • 第一步:转换日期,异常值临时置为NaT
df['date'] = pd.to_datetime(df['raw_date'], errors='coerce')
  • 第二步:单独解析转换失败的异常值
# 筛选转换失败的行
na_mask = df['date'].isna()
df.loc[na_mask, 'date'] = pd.to_datetime(df.loc[na_mask, 'raw_date'], format='%Y-%d-%m', errors='coerce')

方案2:双格式自动适配解析

如果两种格式的样本占比都较高,可使用自定义函数自动适配解析规则:

import pandas as pd
from datetime import datetime

def custom_parse_date(date_str):
    try:
        # 优先尝试解析年-月-日格式
        return datetime.strptime(date_str, '%Y-%m-%d')
    except ValueError:
        try:
            # 解析失败则尝试年-日-月格式
            return datetime.strptime(date_str, '%Y-%d-%m')
        except ValueError:
            # 两种格式均不匹配返回空值
            return pd.NaT

df['date'] = df['raw_date'].apply(custom_parse_date)

方案3:大数据量优化方案

如果数据量超过10万条,可开启自动格式推断提升处理效率:

# 先自动推断格式转换,错误值置空
df['date'] = pd.to_datetime(df['raw_date'], infer_datetime_format=True, errors='coerce')
# 处理剩余的转换失败值
na_mask = df['date'].isna()
df.loc[na_mask, 'date'] = pd.to_datetime(df.loc[na_mask, 'raw_date'], format='%Y-%d-%m', errors='coerce')

补充说明

如果数据中还存在其他格式变体,可自行调整解析规则:

  • 日期用斜杠分隔:将格式符中的-替换为/,例如%Y/%d/%m
  • 月/日不带前导零:对应格式符调整为%Y-%d-%-m(Windows系统下用%Y-%d-%#m)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:06