&引用;关键错误:-1“;在Python中运行IF语句时
我试图在数据帧中运行以下代码。我的意图是根据以下条件将“买入”、“卖出”、“持有”或“等待”作为数据帧(df)的一部分&引用;关键错误:-1“;在Python中运行IF语句时,python,if-statement,Python,If Statement,我试图在数据帧中运行以下代码。我的意图是根据以下条件将“买入”、“卖出”、“持有”或“等待”作为数据帧(df)的一部分 for i in range(len(df)): if df['sma_fast'][i-1]>df['sma_slow'][i-1] and df['sma_fast'][i-2]<df['sma_slow'][i-2]: df['Signal'] = 'Buy' elif df['sma_fast'][i-1]>df[
for i in range(len(df)):
if df['sma_fast'][i-1]>df['sma_slow'][i-1] and df['sma_fast'][i-2]<df['sma_slow'][i-2]:
df['Signal'] = 'Buy'
elif df['sma_fast'][i-1]>df['sma_slow'][i-1] and df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df['Signal'] = 'Hold'
elif df['sma_fast'][i-1]<df['sma_slow'][i-1] and df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df['Signal'] = 'Sell'
elif df['sma_fast'][i-1]<df['sma_slow'][i-1] and df['sma_fast'][i-2]<df['sma_slow'][i-2]:
df['Signal'] = 'Wait'
else:
df['Signal'] = 'nan'
范围内的i(len(df)):
如果df['sma_fast'][i-1]>df['sma_slow'][i-1]和df['sma_fast'][i-2]df['sma_slow'][i-1]和df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df[“信号”]=“保持”
elif df['sma_fast'][i-1]df['sma_slow'][i-2]:
df['Signal']='Sell'
elif df['sma_fast'][i-1]在您的代码中,用于范围内的i(len(df)):
hasi
从值0迭代到df的大小
因此,最初,当i
为0时,首先检查看到的是如果df['sma_fast'][i-1]>df['sma_slow'][i-1]
和其他一些东西。注意,这意味着您正在['sma_fast'][-1]检查df的索引
实际上,不能在负索引处检查数组,因此Python抱怨有一个键错误
我不太确定你想要的边缘案例是什么,但我只想做一些if语句来回避这个问题
for i in range(len(df)):
if i < 2:
continue
if df['sma_fast'][i-1]>df['sma_slow'][i-1] and df['sma_fast'][i-2]<df['sma_slow'][i-2]:
df['Signal'] = 'Buy'
elif df['sma_fast'][i-1]>df['sma_slow'][i-1] and df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df['Signal'] = 'Hold'
elif df['sma_fast'][i-1]<df['sma_slow'][i-1] and df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df['Signal'] = 'Sell'
elif df['sma_fast'][i-1]<df['sma_slow'][i-1] and df['sma_fast'][i-2]<df['sma_slow'][i-2]:
df['Signal'] = 'Wait'
else:
df['Signal'] = 'nan'
范围内的i(len(df)):
如果i<2:
持续
如果df['sma_fast'][i-1]>df['sma_slow'][i-1]和df['sma_fast'][i-2]df['sma_slow'][i-1]和df['sma_fast'][i-2]>df['sma_slow'][i-2]:
df[“信号”]=“保持”
elif df['sma_fast'][i-1]df['sma_slow'][i-2]:
df['Signal']='Sell'
elif df['sma_fast'][i-1]范围(停止)
从0开始。0-1=-1=>KeyError
非常感谢!我把靶场修好了。现在我发现了另一个错误,我只是在“信号”列中得到“保持”。你能帮我解决这个问题吗?您看到代码中有错误吗?非常感谢!我已经修好了射程,现在开始工作了。然而,现在我发现了另一个错误,我只是在“信号”列中得到“保持”。你能帮我解决这个问题吗?您看到代码中有什么错误吗?范围
有一个开始
参数,因此与其继续
,不如从2开始,使用范围(2,len(df))
?谢谢这真的很有帮助!问题现在解决了!