如何添加带有预测的新列?
Posted
技术标签:
【中文标题】如何添加带有预测的新列?【英文标题】:How can I add a new column with forecasts? 【发布时间】:2020-03-17 08:41:51 【问题描述】:我正在尝试使用 ARIMA-Model 进行预测。我的问题是,如何使用未来的新日期(基于未来的步骤)创建一个包含我的预测值的新列。这是我的代码:
import numpy as np
import pandas as pd
from pandas import datetime
import matplotlib.pylab as plt
%matplotlib inline
df = pd.read_csv("Desktop/Daten/probe.csv",sep=";")
df["Monthes"] = pd.to_datetime(dataset["Monthes"], infer_datetime_format=True)
indexedDf = df.set_index(["Monthes"])
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(indexedDf, order =(1,1,2))
results_ARIMA = model.fit(disp=0)
n = 120 # 1 year Forecasting
result = results_ARIMA.forecast(steps=n)[0]
如何使用新的“n”个月将预测结果放入新标签中? ..
【问题讨论】:
你能显示数据框吗?你有预测的日期吗?您可以使用pd.date_range()
创建日期范围,将预测和生成的新日期连接起来,然后附加到原始数据框。
数据框如下所示: Monthes Sales 2017-01-01 01:15:00 4.615121 2017-02-01 02:30:00 4.499810 2017-03-01 15:30:00 3.583519 2017-04-01 01:15:00 4.553877 ...... ...... ........ 我已经得到了基于步骤数的预测结果,我想附加对合适日期的预测.. 感谢您的回复
它适用于这句话: t = pd.date_range(start=(df.Monthes[len(dataset)-1]) , period=n) 但如何将 t 和结果附加在一起?谢谢
使用 pd.concat() 组合它们,并确保两者的长度相同。
我已经添加了答案
【参考方案1】:
假设您想将此列添加到数据框 (df
),您需要执行以下操作。
df['result`] = result
如果您想将此结果写入 Excel 电子表格,并将工作表重命名为结果日期,
N = [30, 60, 90, 120]
with pd.ExcelWriter('output.xlsx') as writer:
# if you want to write multiple forecasts to
# the same file, but in different spreadsheets
for n in N:
result = results_ARIMA.forecast(steps=n)[0]
df['result'] = result
df.to_excel(writer, sheet_name='Sheet_n='.format(n))
如果您想用明天的日期 (2019-11-22) 命名工作表,则只需更改 sheet_name='2019-11-22'
。
如何获取明天的日期?
import datetime
def tomorrow():
return datetime.date.today() + datetime.timedelta(days=1)
print(tomorrow())
日期转字符串:
dates.apply(lambda x: x.strftime('%Y-%m-%d'))
我建议您查看the documentation 以更清楚地了解pandas.ExcelWriter
。
【讨论】:
“新标签页”是什么意思?您是否尝试将此结果写入 Excel 电子表格? 嗨@CyperherX。是的,我想写结果,但要使用合适的日期。例如,我想预测明天,所以结果必须是明天的日期。希望你能理解我的问题并感谢你的回复 @AhmedMadiouni 让我知道这是否是您要找的。span> 非常感谢!!我使用以下方法创建了一个新日期:t = pd.date_range(start=(df.Monthes[len(df)-1]) , period=n)。您知道如何将此日期与结果结合起来吗?获取包含日期和预测的数组? @AhmedMadiouni 请更新问题以反映这些详细信息。我已经包含了将日期转换为字符串所需的操作。但是,让我们在这里限制问题。如果您还有其他需要了解的内容来解决您的总体要求,请打开一个新问题/搜索一个已经回答了您的问题的问题。【参考方案2】:你可以这样做:
假设您的数据框如下所示:
date spend
0 2019-11-10 800
1 2019-11-11 800
2 2019-11-12 300
3 2019-11-13 150
4 2019-11-14 300
5 2019-11-15 500
6 2019-11-16 800
7 2019-11-17 600
8 2019-11-18 400
n = 5
t = pd.date_range(start=(df.date[len(df)-1]) , periods=n)
# assume predictions
predictions = np.random.rand(5) * 1000
# array([619.34810384, 600.78387725, 242.4680893 , 920.58391429, 489.36016082])
new_df = pd.DataFrame([[x, y] for x,y in zip(t, predictions)], columns=["date", "spend"])
print(new_df)
date spend
0 2019-11-19 94.944353
1 2019-11-20 64.813264
2 2019-11-21 56.319640
3 2019-11-22 81.696114
4 2019-11-23 43.533978
现在你终于可以将它连接/附加到你的数据框了:
df = pd.concat([df, new_df]).reset_index(drop=True)
输出
date spend
0 2019-11-10 800
1 2019-11-11 800
2 2019-11-12 300
3 2019-11-13 150
4 2019-11-14 300
5 2019-11-15 500
6 2019-11-16 800
7 2019-11-17 600
8 2019-11-18 400
9 2019-11-19 94.944353
10 2019-11-20 64.813264
11 2019-11-21 56.319640
12 2019-11-22 81.696114
13 2019-11-23 43.533978
【讨论】:
以上是关于如何添加带有预测的新列?的主要内容,如果未能解决你的问题,请参考以下文章