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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:07