不断收到 IndexError 消息?
Keep getting IndexError Message?
我正在尝试建立一个项目,在该项目中我使用指数平滑来预测商品价格。我从基本的指数平滑开始,然后逐步进行三次指数平滑。但是,当我使用此代码时
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
我做错了什么?我该如何解决这个问题,以便我的指数平滑函数 returns 不是错误?
当您尝试使用列表的值索引列表时,您可能会得到一个不是有效列表索引的值。例如,如果列表是 z=[100000]
,for
循环将尝试在索引 1000000
处索引 z
,这显然不存在。
您可能希望使用 range(len())
:
def exp_smooth(alpha, z):
for i in range(len(z)):
new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))
或者,更好的是,enumerate()
:
def exp_smooth(alpha, z):
for index, value in enumerate(z):
new_res = z.append((alpha * value + (1 - alpha * z[index-1])))
我正在尝试建立一个项目,在该项目中我使用指数平滑来预测商品价格。我从基本的指数平滑开始,然后逐步进行三次指数平滑。但是,当我使用此代码时
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
我做错了什么?我该如何解决这个问题,以便我的指数平滑函数 returns 不是错误?
当您尝试使用列表的值索引列表时,您可能会得到一个不是有效列表索引的值。例如,如果列表是 z=[100000]
,for
循环将尝试在索引 1000000
处索引 z
,这显然不存在。
您可能希望使用 range(len())
:
def exp_smooth(alpha, z):
for i in range(len(z)):
new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))
或者,更好的是,enumerate()
:
def exp_smooth(alpha, z):
for index, value in enumerate(z):
new_res = z.append((alpha * value + (1 - alpha * z[index-1])))