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,提问作者Любовь Пономарева
相关产品推荐
相关产品推荐

