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

如何解决pd.to_datetime转换31DEC9999时的OutOfBoundsDatetime错误?

解决pd.to_datetime解析"31DEC9999"触发OutOfBoundsDatetime的方案

核心原因

pandas默认用numpy引擎解析日期,而numpy的datetime64[ns]类型有时间范围限制(1677-09-21至2262-04-11),9999年超出了这个范围,因此报错。以下是几种可行的解决方法:

方法1:用Python原生datetime模块解析

直接借助Python原生datetime,它支持到9999年的日期:

from datetime import datetime
import pandas as pd

date_str = "31DEC9999"
# 解析为原生datetime对象
parsed_date = datetime.strptime(date_str, "%d%b%Y")
# 存入pandas时保留object类型
df = pd.DataFrame({"date": [parsed_date]})
# 若需要字符串格式的日期,可转为指定格式
df['date_str'] = df['date'].apply(lambda x: x.strftime("%Y-%m-%d"))

方法2:指定pd.to_datetime使用Python引擎

在pd.to_datetime中指定engine='python',让pandas调用原生datetime解析,避开numpy的范围限制:

import pandas as pd

date_str = "31DEC9999"
parsed_date = pd.to_datetime(date_str, format="%d%b%Y", engine='python')
# 此时得到的Timestamp对象可正常表示9999-12-31,但注意后续时间运算可能仍受numpy限制,优先推荐方法1

方法3:手动转换为日期字符串(应急方案)

如果仅需要YYYY-MM-DD格式的字符串,可直接解析后格式化,无需转为日期对象:

import pandas as pd
from datetime import datetime

df = pd.DataFrame({"date": ["31DEC9999"]})
df['formatted_date'] = df['date'].apply(lambda x: datetime.strptime(x, "%d%b%Y").strftime("%Y-%m-%d"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:42:38