&引用;关键错误:-1“;在Python中运行IF语句时

&引用;关键错误:-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[

我试图在数据帧中运行以下代码。我的意图是根据以下条件将“买入”、“卖出”、“持有”或“等待”作为数据帧(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)):
has
i
从值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))
?谢谢这真的很有帮助!问题现在解决了!