使用FB Prophet拟合模型时遭遇TypeError: bad operand type for unary -: 'Timestamp'错误的求助
FB Prophet拟合模型时遭遇TypeError: bad operand type for unary -: 'Timestamp'错误的求助
嘿,我一眼就看到两个关键问题导致了这个错误,咱们一个个说:
问题1:变量名不匹配,误用了其他模型的fit方法
你定义的Prophet模型是model_fb = Prophet(),但调用拟合的时候写的是model.fit(test_fb)——这里的model应该是你之前代码里创建的另一个时间序列模型(比如statsmodels的ARIMA/SARIMAX),它的fit方法根本不认识Prophet要求的ds和y列格式,会把所有列当成数值型参数处理,遇到ds列的Timestamp类型时,尝试执行取负操作,直接触发了TypeError。
问题2:数据集使用逻辑错误
就算变量名对了,你也不该用测试集来拟合模型啊!拟合模型必须用训练集train_fb,测试集是留着验证模型预测效果的,这是时间序列建模的基本逻辑。
修正后的代码
# FB_Prophet Model # 拆分训练集和测试集 from sklearn.model_selection import train_test_split # 注意:新版本Prophet的导入方式是from prophet import Prophet,旧版本是from fbprophet import Prophet,根据你的安装版本调整 from prophet import Prophet train_fb, test_fb = train_test_split(df_fb, test_size=0.20, shuffle=False) # 初始化Prophet模型 model_fb = Prophet() # 用训练集拟合模型,同时修正变量名 model_fb.fit(train_fb)
额外检查点
- 确认你的
df_fb里的ds列确实是datetime64[ns]类型(你已经检查过了,这部分没问题) - 确认Prophet的导入语句正确,避免版本不兼容的问题
备注:内容来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

