由于引用“forecast”的列值的方式不正确,您的代码给出了“keyerror”。因为第一次运行代码时,“forecast”列尚未创建,并且当它尝试引用df时
'forecast'
在这里,我们的任务是更新动态创建的名为“forecast”的新列中的值。因此,您可以在[i,'forecast']上写df.at而不是df['forecast'][i]。
代码中还有一个问题。当i的值小于period时,您将“i”分配给forecast,据我所知,这是不正确的。在这种情况下,它不应该显示任何内容。
以下是我的更正代码版本:
import pandas as pd
df = pd.read_csv("./sales.csv", index_col="time_period")
periods = df.index.tolist()
period = int(input("Enter a period for the moving average :"))
sum1 = 0
for i in periods:
print(i)
if i < period:
df.at[i,'forecast'] = ''
else:
for j in range(period):
sum1 += df['sales'][i-j]
df['forecast'][i] = sum1/period
sum1 = 0
print(df)
df.to_csv("./forecast_mannual.csv")
输入period=2计算移动平均值时的输出:
希望这有帮助。