ARIMA预测代码报错:无法拼接numpy.int64类型对象,求解决方法
ARIMA预测代码报错修复方案
报错原因
training_data为pandas Series/DataFrame类型,直接调用append方法添加numpy.int64类型的测试值不符合要求——pandas的拼接方法仅支持同类型的Series/DataFrame对象。
修改方案
将单个测试值转换为与training_data同类型的对象后再拼接,以下是两种可行方式:
方式1:转换为Series/DataFrame后用concat拼接(推荐,避免append弃用警告)
如果training_data是Series:
import pandas as pd from statsmodels.tsa.arima.model import ARIMA model_predictions = [] for i in range(n_test_obser): model = ARIMA(training_data, order=(0,1,1)) model_fit = model.fit() output = model_fit.forecast() yhat = output model_predictions.append(yhat) actual_test_value = testing_data[i] # 将单个值转为带连续索引的Series,再拼接 new_data = pd.Series([actual_test_value], index=[training_data.index[-1] + 1]) training_data = pd.concat([training_data, new_data]) # 若为时间序列,需替换索引为对应时间,例如: # new_data = pd.Series([actual_test_value], index=[training_data.index[-1] + pd.Timedelta(days=1)])
如果training_data是DataFrame:
import pandas as pd from statsmodels.tsa.arima.model import ARIMA model_predictions = [] for i in range(n_test_obser): model = ARIMA(training_data, order=(0,1,1)) model_fit = model.fit() output = model_fit.forecast() yhat = output model_predictions.append(yhat) actual_test_value = testing_data[i] # 将单个值转为单行DataFrame,保持列名一致 new_data = pd.DataFrame([actual_test_value], columns=training_data.columns) training_data = pd.concat([training_data, new_data], ignore_index=True)
方式2:使用append(兼容旧版pandas)
若坚持使用append,同样需要转换类型:
# 以Series为例 training_data = training_data.append(pd.Series([actual_test_value], index=[training_data.index[-1]+1]))
额外提示
代码中的break语句会让循环仅执行一次,正式预测时需移除该语句,才能遍历所有测试样本。
内容的提问来源于stack exchange,提问作者Pandarff
相关产品推荐
相关产品推荐

