そこで、小さな販売データセットで時系列モデルを実行し、次の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変数をリストに変換してから追加しようとしましたが、役に立ちませんでした。どんな助けでもありがたいです。ありがとう。
1つの解決策は、df.loc
を使用して、dataFrameの最後の位置に新しい配列を追加することです。
df.loc[len(df)] = your_array
ただし、これは効率的な原因ではありません。複数回実行する場合は、新しい追加ごとにDataFrameの長さを取得する必要があります。
より良い解決策は、追加する必要のある値のディクショナリを作成し、それをdataFrameに追加することです。
df = df.append(dict(Zip(df.columns, your_array)), ignore_index=True)
結果を辞書リストに追加してから、その辞書リストをデータフレームに追加できます。
ARIMAの予測結果を、それぞれ「datetime」(YYYY-MM-DD)と「value」の2つの列で実際のデータフレームの最後に追加するとします。
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)