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

解决Pandas中古老年份字符串转datetime的OutOfBoundsDatetime问题

解决pandas转换1500年代日期的OutOfBoundsDatetime错误

问题原因

pandas默认使用nanosecond精度的datetime64[ns]类型,其可表示的日期范围是1677-09-21至2262-04-11,1500年代的日期超出这个范围,因此触发OutOfBoundsDatetime错误。

整列转换的解决方法

方法1:使用Python引擎解析日期

直接在pd.to_datetime中指定engine='python',利用Python标准库的datetime模块处理更早的日期(支持公元1年及以后的日期),语法简单且能保留日期计算能力:

import pandas as pd

# 单值测试
datestring = '01-04-1595'
datenew = pd.to_datetime(datestring, format='%d-%m-%Y', engine='python')

# 整列转换
df['date_column'] = pd.to_datetime(df['date_column'], format='%d-%m-%Y', engine='python')
  • 优点:无需额外依赖,代码简洁,支持日期加减计算。
  • 缺点:处理超大数据集时,速度比默认的numpy引擎慢。

方法2:转换为天精度的datetime类型

将日期转换为天精度的datetime64[D]类型,其可表示的范围远大于nanosecond精度(覆盖公元前至公元后极远年份),完全满足1500-1900年的需求:

from datetime import datetime
import pandas as pd

# 整列转换:先转为Python datetime对象,再转成天精度类型
df['date_column'] = df['date_column'].apply(
    lambda x: datetime.strptime(x, '%d-%m-%Y')
).astype('datetime64[D]')
  • 优点:计算效率高,日期范围无限制,足够支持天数差计算。
  • 缺点:需要手动调用Python的datetime.strptime,代码稍长。

方法3:使用第三方库dateutil(可选)

如果日期格式不固定,可使用dateutil.parser自动解析,但需先安装python-dateutil:

from dateutil.parser import parse
import pandas as pd

df['date_column'] = df['date_column'].apply(parse)
  • 优点:自动识别多种日期格式,无需指定format参数。
  • 缺点:安装额外依赖,解析速度较慢,且可能出现格式识别错误。

验证天数差计算

转换完成后,直接对日期列做减法即可得到天数差:

df['days_diff'] = df['end_date'] - df['start_date']
# 提取具体天数数值
df['days_diff_num'] = df['days_diff'].dt.days

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:35:14