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

pd.to_datetime转换DataFrame object日期触发OutOfBoundsDatetime越界报错

报错根因

  • pandas 默认的 datetime64[ns] 类型基于64位整数存储纳秒级时间戳,存在固定的取值边界:仅支持公元1677年9月14日 到 公元2262年4月11日之间的时间,超出该范围的时间会直接触发越界错误。
  • 当前场景的直接触发原因:源Inv_Net_Due_Date_new字段存在格式异常的脏值。你指定的转换格式是%Y-%m(匹配标准4位年+2位月的字符串),但报错信息里出现了带具体日期的203-02-19,说明字段内存在被截断的残缺值(比如原本应该是2023-02类的合规值,被截断丢失了字符,变成了3位年份的无效值),被pandas解析后生成了远早于取值边界的时间戳,最终触发报错。

排查与解决步骤

  • 第一步:先定位并清洗源字段的异常脏值
    用正则匹配筛出所有不符合YYYY-MM格式的异常行,查看具体有哪些无效值:
    # 匹配不符合4位年-2位月格式的所有记录
    invalid_mask = ~mydata['Inv_Net_Due_Date_new'].str.match(r'^\d{4}-\d{2}$', na=False)
    # 打印所有唯一的异常值,针对性修正
    print(mydata.loc[invalid_mask, 'Inv_Net_Due_Date_new'].unique())
    
    找到截断、格式错位的脏值后,按照业务规则修正为合规的YYYY-MM格式,从根源减少转换报错。
  • 第二步:转换时增加容错机制,避免单条脏值中断全量流程
    如果清洗后仍有少量无法修正的越界值,可以在pd.to_datetime中增加errors='coerce'参数,让无法解析、超出范围的自动转为空值NaT,而非直接抛出异常中断程序:
    mydata['Inv_Net_Due_Date_new'] = pd.to_datetime(
        mydata['Inv_Net_Due_Date_new'],
        format='%Y-%m',
        errors='coerce'
    )
    
  • 第三步:如果业务确实需要处理边界外的早/晚期日期
    可以调整时间戳的存储精度为秒级,绕开纳秒类型的范围限制:
    mydata['Inv_Net_Due_Date_new'] = pd.to_datetime(
        mydata['Inv_Net_Due_Date_new'],
        format='%Y-%m',
        errors='coerce',
        unit='s'
    )
    
    秒级精度的datetime64[s]支持的时间范围远大于纳秒类型,可覆盖多数长周期历史日期的存储需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 09:06:04