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

Pandas中处理超出范围时间戳的日差计算问题

处理Pandas中9999-12-31日期的天数差计算问题

由于Pandas默认的datetime64[ns]类型存在范围限制(上限为2262-04-11),直接转换9999-12-31会报错或被转成NaN。要保留该日期的天数差计算能力,有两种可靠方案:

方案1:使用Python原生datetime对象存储日期

Python标准库的datetime.datetime支持9999-12-31,可以将日期列转为原生datetime对象(Pandas中存为object类型)后直接计算差值:

import pandas as pd
from datetime import datetime

# 构造示例数据
df = pd.DataFrame({
    'start_date': ['2023-01-01', '2024-05-10'],
    'final_pmt_date': ['2023-12-31', '9999-12-31']
})

# 将字符串日期转为Python原生datetime对象
df['start_date'] = df['start_date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
df['final_pmt_date'] = df['final_pmt_date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))

# 计算天数差并转为整数
df['days_diff'] = (df['final_pmt_date'] - df['start_date']).dt.days

方案2:使用Pandas Period类型

Pandas的Period类型支持更宽泛的日期范围,适合处理超远期日期:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'start_date': ['2023-01-01', '2024-05-10'],
    'final_pmt_date': ['2023-12-31', '9999-12-31']
})

# 将日期转为Period类型(按天频率)
df['start_date'] = pd.PeriodIndex(df['start_date'], freq='D')
df['final_pmt_date'] = pd.PeriodIndex(df['final_pmt_date'], freq='D')

# 计算天数差
df['days_diff'] = (df['final_pmt_date'] - df['start_date']).astype(int)

两种方案都能避免将9999-12-31转为NaN,且能准确计算与其他日期的天数差,完全匹配SQL中的计算逻辑。

内容的提问来源于stack exchange,提问作者Любовь Пономарева

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:45:30