web-dev-qa-db-ja.com

データフレームへの配列の追加(python)

そこで、小さな販売データセットで時系列モデルを実行し、次の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変数をリストに変換してから追加しようとしましたが、役に立ちませんでした。どんな助けでもありがたいです。ありがとう。

3
IndigoChild

1つの解決策は、df.locを使用して、dataFrameの最後の位置に新しい配列を追加することです。

df.loc[len(df)] = your_array

ただし、これは効率的な原因ではありません。複数回実行する場合は、新しい追加ごとにDataFrameの長さを取得する必要があります。

より良い解決策は、追加する必要のある値のディクショナリを作成し、それをdataFrameに追加することです。

df = df.append(dict(Zip(df.columns, your_array)), ignore_index=True)
1
saloua

結果を辞書リストに追加してから、その辞書リストをデータフレームに追加できます。

ARIMAの予測結果を、それぞれ「datetime」(YYYY-MM-DD)と「value」の2つの列で実際のデータフレームの最後に追加するとします。

従う手順

  • まず、実際のデータフレームの日時列で最大日を見つけて、日時に変換します。予測結果に将来の日付を割り当てたいと思います。
  • 空の辞書リストを作成し、ループ内で日時の値を1日インクリメントしてリストを埋め、その後に予測結果を配置します。
  • その辞書リストをデータフレームに追加します。追加機能は追加された結果データフレームのコピーを作成するため、左側の値としてそれ自体に再割り当てすることを忘れないでください。
  • データフレームのインデックスを再作成します。

コード

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)
0
Tarik Kranda