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

如何生成1-1-1至9999-12-31万年日期?pandas date_range返回空列表

问题根源

你代码跑不出结果有两个核心原因:

  • pandas默认使用纳秒精度的datetime64[ns]类型存储时间,支持的时间范围仅为1677-09-21到2262-04-11,公元1年远早于这个下限,因此无法正常生成序列。
  • 传参的日期格式不规范,'31/12/1999'是日/月/年写法,pandas默认解析逻辑容易识别出错,统一用YYYY-MM-DD格式传参最稳妥。
可行实现方法

方法1:pandas 2.0及以上版本直接指定时间单位

pandas 2.0开始支持非纳秒级的时间存储精度,指定unit参数为秒级(s)或者天级(D),就能把支持的时间范围扩展到覆盖公元1年到9999年,生成效率很高:

import pandas as pd

# 生成公元1年1月1日到9999年12月31日的日频日期序列
date_df = pd.date_range(
    start='0001-01-01',
    end='9999-12-31',
    freq='D',
    unit='s'
)

方法2:兼容低版本pandas的标准库生成方案

如果用的是2.0以下的pandas版本,可以先用Python标准库datetime遍历生成日期,再转成pandas序列:

from datetime import datetime, timedelta
import pandas as pd

start_date = datetime(1, 1, 1)
end_date = datetime(9999, 12, 31)
day_delta = timedelta(days=1)

date_list = []
current_date = start_date
while current_date <= end_date:
    date_list.append(current_date)
    current_date += day_delta

date_df = pd.Series(date_list)

这个方案生成全量10000年的日期总共约365万条记录,普通消费级设备几秒就能跑完,内存占用在50MB以内,没有性能问题。

补充说明:公元1582年之前全球通用儒略历,现行公历(格里高利历)是1582年之后才逐步推行的,上述两种方法默认都是按格里高利历向前回推计算日期,如果需要严格匹配历史上的真实历法日期,需要额外做儒略历到格里高利历的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:36:25