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

如何解决Python中Out of bounds nanosecond timestamp:3026-06-30错误?

问题描述

我有一个仅包含datetime类型列(Quarter)的DataFrame,在使用带外生变量的SARIMAX模型后,调用以下自定义函数绘制时间序列图:

def eval_model(model,tr,tst,exog_tst,exog_tr,name='Model',lags=4):
    lb = np.mean(sm.stats.acorr_ljungbox(model.resid, lags=lags, return_df=True).lb_pvalue)
    pred = model.forecast(steps=len(tst))
    fig1, ax = plt.subplots()
    ax.plot(tr, label='training')
    ax.plot(tst, label='test')
    ax.plot(pred, label='prediction')
    plt.legend(loc='upper left')
    tit = name + ":  LjungBox p-value --> " + str(lb) + "\n MAPE: " + str(round(mean_absolute_percentage_error(tst, pred)*100,2)) + "%"
    plt.title(tit)
    plt.ylabel('Pasajeros')
    plt.xlabel('Date')
    plt.show()
    print(lb)

eval_model(model,tr,tst,exog_tr=exog_tr, exog_tst=exog_tst, name='Model',lags=4)

运行后出现Python错误:Out of bounds nanosecond timestamp: 3026-06-30 00:00:00。我检查过Quarter列的唯一值(无异常日期),转换datetime类型时使用errors='coerce'也无效,请问该如何修复这个错误?

解决方案

这个错误的核心原因是SARIMAX生成的预测结果没有关联测试集的时间索引,导致matplotlib尝试绘制超出numpy datetime64[ns]范围的日期(该类型支持的最大日期为2262-04-11)。以下是具体修复方法:

  • 为预测结果绑定测试集的时间索引
    在调用model.forecast()时传入外生变量,并将预测值的索引设置为测试集tst的索引,确保绘图时日期对应正确:

    pred = model.forecast(steps=len(tst), exog=exog_tst)
    pred.index = tst.index  # 关键步骤:关联测试集时间索引
    
  • 检查训练/测试集的索引连续性
    确认训练集tr和测试集tst是按时间顺序正确分割的,索引无断层或混乱,避免模型预测时错误推断日期范围。

  • 验证日期的有效范围
    显式检查Quarter列的日期是否在datetime64[ns]的有效区间内:

    df['Quarter'] = pd.to_datetime(df['Quarter'], errors='coerce')
    # 输出日期范围确认
    print(f"日期范围:{df['Quarter'].min()} 至 {df['Quarter'].max()}")
    

    若存在超出1677-09-21到2262-04-11的日期,需修正原始数据的日期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:46:17