如何解决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
相关产品推荐
相关产品推荐

