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

如何为20万行Pandas DataFrame添加日期列且避免OutOfBoundsDatetime错误

解决pandas添加日期列时的OutOfBoundsDatetime错误

错误原因

你的代码触发OutOfBoundsDatetime是因为pandas默认的datetime64[ns]类型存在时间范围限制——它仅能表示1677-09-21至2262-04-11之间的日期。而你要生成的结束日期是今日加200000天,该日期已超出上述范围,因此报错。

解决方案

以下是三种可行的解决方式,可根据需求选择:

1. 使用更低精度的datetime类型(推荐)

通过指定pd.date_range的dtype参数为datetime64[ms](毫秒精度),扩大可表示的时间范围,同时保留pandas的datetime运算能力:

import pandas as pd
import datetime

df1 = pd.DataFrame(index=range(200000), columns=range(115))
start_date = datetime.date.today()
# 直接指定生成200000条日期数据,用毫秒精度存储
df1['date'] = pd.date_range(start=start_date, periods=200000, dtype='datetime64[ms]')

注:这里改用periods参数直接指定行数,避免手动计算end_date的冗余步骤。

2. 用object类型存储原生datetime.date对象

如果仅需存储日期、不需要pandas的datetime运算功能,可以直接生成Python原生datetime.date对象列表,以object类型存入DataFrame:

import pandas as pd
import datetime

df1 = pd.DataFrame(index=range(200000), columns=range(115))
start_date = datetime.date.today()
# 生成日期列表
dates = [start_date + datetime.timedelta(days=i) for i in range(200000)]
df1['date'] = dates

这种方式无时间范围限制,但无法使用pd.Series.dt相关的时间操作方法。

3. 使用Period类型存储日期

Period类型支持更宽泛的时间范围,且保留时间运算能力,适合需要处理时间区间的场景:

import pandas as pd
import datetime

df1 = pd.DataFrame(index=range(200000), columns=range(115))
start_date = datetime.date.today()
# 按天频率生成Period数组
df1['date'] = pd.period_range(start=start_date, periods=200000, freq='D')

后续可通过df1['date'].dt.to_timestamp()转换回datetime类型(需确保转换后的日期在ns精度范围内)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:17