将ARIMA预测结果追加至Python原DataFrame时遇类型错误求助
解决ARIMA预测值追加到原DataFrame的索引匹配问题
看起来你遇到的核心问题是:df.append()只能接受pandas的NDFrame对象(DataFrame/Series),而你存储预测值的pred是普通列表,不是带索引的pandas对象,所以才会抛出TypeError: cannot concatenate a non-NDFrame object错误。
下面是一步步的解决方案,确保预测值和原数据的月份索引完全匹配:
步骤1:生成未来12个周期的时间索引
因为你的原数据集df1是以月份为索引的,首先需要生成和原索引频率一致的未来12个月索引。假设原索引是DatetimeIndex(如果不是,先转成它):
import pandas as pd # 确保原索引是DatetimeIndex(如果原索引是字符串格式,先转换) df1.index = pd.to_datetime(df1.index) # 获取原数据的最后一个月份,生成未来12个月的索引 last_month = df1.index[-1] future_index = pd.date_range( start=last_month + pd.DateOffset(months=1), periods=12, freq='M' # 月度频率,和原索引保持一致 )
如果你的原索引是字符串格式(比如"2023-01"),生成索引后可以再转成字符串:
future_index = future_index.strftime('%Y-%m')
步骤2:将预测值转换为带索引的Series
把ARIMA输出的y_future(numpy数组)转换成pandas Series,同时指定上面生成的未来索引:
# 假设原数据集的销售额列名为'sales',或者直接用df1.columns[0]取第一列名 future_sales = pd.Series( y_future, index=future_index, name=df1.columns[0] )
步骤3:合并原数据和预测值
现在可以用pd.concat(推荐,因为df.append()在pandas 2.0+已被弃用)或者append(旧版本兼容)合并:
# 方法1:推荐用pd.concat df_combined = pd.concat([df1, future_sales], axis=0) # 方法2:旧版本pandas可用append df_combined = df1.append(future_sales)
为什么你之前的尝试没成功?
你把pred转为列表后依然报错,是因为列表不是pandas的NDFrame对象,df.append()无法识别。必须把预测值包装成带匹配索引的Series/DataFrame,才能保证合并时索引对齐。
举个反例:如果直接用你的pred列表,即使转成数组也不行,因为它没有索引信息:
# 错误示例:pred是列表,无法直接合并 pred = [] pred.append(y_future) df1.append(pred) # 抛出TypeError
而我们上面的方法,给预测值绑定了和原数据一致的月份索引,合并后就能完美保留索引的连续性。
内容的提问来源于stack exchange,提问作者IndigoChild
相关产品推荐
相关产品推荐

