【问题标题】:Appending arrays to dataframe (python)将数组附加到数据框(python)
【发布时间】:2018-07-03 09:24:56
【问题描述】:

因此,我在一个小型销售数据集上运行了一个时间序列模型,并预测了接下来 12 个时期的销售额。使用以下代码:

 mod1=ARIMA(df1, order=(2,1,1)).fit(disp=0,transparams=True)
    y_future=mod1.forecast(steps=12)[0]

其中 df1 包含以月份为索引的销售额值。现在我按以下方式存储预测值:

pred.append(y_future)

现在,我需要将预测值附加到原始数据集 df1,最好使用相同的索引。我正在尝试使用以下代码:

df1.append(pred, ignore_index=False)

但我收到以下错误:

TypeError: cannot concatenate a non-NDFrame object

我尝试将 pred 变量转换为列表然后追加,但无济于事。 任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 这里的问题似乎是您的 pred 不是 df 类型,而可能是 list 类型。您需要做的是将 pred 转换为数据框。像这样new_pred = pd.DataFrame(pred)
  • 是否要将其附加到数据框中的新列?
  • @Pratik Ku​​mar,不,我想将其作为行附加到现有数据框。
  • @Imre_G,谢谢我已经尝试过了,但它没有被附加为行。
  • df['predictions'] = pred 怎么样?

标签: python arrays pandas dataframe sklearn-pandas


【解决方案1】:

您可以将结果附加到字典列表中,然后将该字典列表附加到数据框。

假设您希望将 ARIMA 预测结果附加到实际数据框的末尾,分别包含两列“日期时间”(YYYY-MM-DD) 和“值”。

要遵循的步骤

  • 首先在您的实际数据框的日期时间列中找到最大天数并将其转换为日期时间。我们希望为我们的预测结果指定未来的日期。
  • 创建一个空字典列表并在循环内通过将 datetime 值递增 1 天来填充它,然后放置一个预测结果。
  • 将该字典列表附加到您的数据框。不要忘记将其重新分配给自己作为左侧值,因为 append 函数会创建附加结果数据框的副本。
  • 重新索引您的数据框。

代码

lastDay = dfActualData[dfActualData['datetime'] == dfActualData['datetime'].max()].values[0][0]
dtLastDay = lastDay.to_pydatetime("%Y-%m-%d")

listdict = []
for i in range(len(results)):
    forecastedDate = dtLastDay + timedelta(days = i + 1)
    listdict.append({'datetime':forecastedDate , 'value':results[i]})

dfActualData= dfActualData.append(listdict, ignore_index=True)
dfActualData.reset_index(drop=True)

【讨论】:

    【解决方案2】:

    一种解决方案是使用 df.loc 将新数组附加到您的 dataFrame 的最后一个位置

    df.loc[len(df)] = your_array
    

    但这不是有效的,因为如果你想多次这样做,它必须为每个新追加获取 DataFrame 的长度。

    更好的解决方案是创建一个包含您需要附加的值的字典,并将其附加到数据帧中。

    df = df.append(dict(zip(df.columns, your_array)), ignore_index=True)
    

    【讨论】:

    • hi@saloua 对此表示感谢,但我想将预测值作为行附加到原始销售数据框中,您所说的方法可能适用于我相信的列。
    猜你喜欢
    • 2018-04-24
    • 2018-01-22
    • 1970-01-01
    • 2018-10-13
    • 2019-09-08
    • 1970-01-01
    • 2021-09-22
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多