Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 继续收到索引器错误消息?_Python_Dataframe_Forecasting - Fatal编程技术网

Python 继续收到索引器错误消息?

Python 继续收到索引器错误消息?,python,dataframe,forecasting,Python,Dataframe,Forecasting,我正在尝试建立一个项目,我使用指数平滑法来预测商品的价格。我将从基本的指数平滑开始,然后逐步发展到三重指数平滑。但是,当我使用此代码时 with open('HistoricalData_1617379638571.csv', newline='') as f: reader = csv.reader(f) data = list(reader) df = pd.read_csv('HistoricalData_1617379638571.csv') df.columns = ['Date','

我正在尝试建立一个项目,我使用指数平滑法来预测商品的价格。我将从基本的指数平滑开始,然后逐步发展到三重指数平滑。但是,当我使用此代码时

with open('HistoricalData_1617379638571.csv', newline='') as f:
reader = csv.reader(f)
data = list(reader)
df = pd.read_csv('HistoricalData_1617379638571.csv')
df.columns = ['Date','Close/Last','Volume','Open','High','Low']
df.set_index('Date', inplace=True)
print(df)
x=df.loc[:,'Close/Last'].values
y=list(x)

z=[int(i) for i in y]
print(z)
alpha=0.9

def exp_smooth(alpha,z):
   for i in z:
      new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))

   print(new_res)

exp_smooth(alpha,z)
我一直收到错误信息

Traceback (most recent call last):
  File "main.py", line 38, in <module>
    exp_smooth(alpha,z)
  File "main.py", line 34, in exp_smooth
    new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“main.py”,第38行,在
exp_平滑(alpha,z)
文件“main.py”,第34行,exp\u平滑
new_res=z.append((alpha*z[i]+(1-alpha*z[i-1]))
索引器:列表索引超出范围

我做错了什么?如何修复此问题,使指数平滑函数返回的不是错误?

当您尝试使用列表的值对列表进行索引时,可能会得到一个不是列表有效索引的值。例如,如果列表为
z=[100000]
,则
For
循环将尝试在索引
1000000
处索引
z
,这显然是不存在的

您可能希望使用
范围(len())

def exp_平滑(alpha,z):
对于范围内的i(len(z)):
new_res=z.append((alpha*z[i]+(1-alpha*z[i-1]))
或者,更好的是,
enumerate()

def exp_平滑(alpha,z):
对于索引,枚举中的值(z):
new_res=z.append((alpha*value+(1-alpha*z[index-1]))

请修复缩进。代码的哪些部分在
with
块中?
for i in z:
z
设置为元素,而不是它们的索引。为什么要使用
z[i]
z.append()
在适当的位置修改列表,它不会返回任何内容。所以
new_res
将是
None
。你可能想要的是
范围内的i(1,len(z)):
你需要从1开始,这样
z[i-1]
将是有效的。我怀疑你可以在
numpy
或statpy中找到一个内置的指数平滑函数。谢谢你,@Jacob Lee@威廉戴维希格斯三没问题!在第一次迭代中,
z[index-1]
将是
z[-1]
,这是列表的最后一个元素。我怀疑他们是否希望平滑像这样结束。@Barmar这是原始代码中的内容,所以我同意了,尽管我同意:我认为使用列表中的最后一个元素也不适用于平滑。正如我在评论中所说,他可能想要
范围(1,len(z))