Python 3.x 枚举返回索引-1,导致ValueError:值的长度与索引的长度不匹配

Python 3.x 枚举返回索引-1,导致ValueError:值的长度与索引的长度不匹配,python-3.x,pandas,enumerate,Python 3.x,Pandas,Enumerate,我正在尝试在我的df中创建一个新的专栏,类似于: df["Signal"] = signalList 然而,我得到了这个错误“Enumerate返回索引-1导致ValueError:值的长度与索引的长度不匹配”。所以我检查了我专栏的长度: print(len(df["Crossover"])) 返回8192。所以我将代码调整为打印*x,这样我就可以看到它上升到哪里,得到*8191。我怎样才能解决这个问题?干杯 signalList = [] for x,i in enumerate(df[

我正在尝试在我的df中创建一个新的专栏,类似于:

df["Signal"] = signalList
然而,我得到了这个错误“Enumerate返回索引-1导致ValueError:值的长度与索引的长度不匹配”。所以我检查了我专栏的长度:

print(len(df["Crossover"]))
返回8192。所以我将代码调整为打印*x,这样我就可以看到它上升到哪里,得到*8191。我怎样才能解决这个问题?干杯

signalList = []
 for x,i in enumerate(df["Crossover"]):
print("*"+str(x))
if i == True:
    if df['EMA ' + str(emaShort)].iloc[x] > df['EMA ' + str(emaLong)].iloc[x]:
        signal = "Buy"
        signalList.append(signal)
    elif df['EMA ' + str(emaShort)].iloc[x] < df['EMA ' + str(emaLong)].iloc[x]:
        signal = "Sell"
        signalList.append(signal)
elif i != True:
    signal = "None"
    signalList.append(signal)

首先,代码中可能没有正确的缩进,正确的缩进是

signalList = []
for x, i in enumerate(df["Crossover"]):
    print("*" + str(x))
    if i == True:
        if df['EMA ' + str(emaShort)].iloc[x] > df['EMA ' + str(emaLong)].iloc[x]:
            signal = "Buy"
            signalList.append(signal)
        elif df['EMA ' + str(emaShort)].iloc[x] < df['EMA ' + str(emaLong)].iloc[x]:
            signal = "Sell"
            signalList.append(signal)
    elif i != True:
        signal = "None"
        signalList.append(signal)

我想在您的代码> df中有一行满足这个条件。

而不是< <代码> < /COD> >循环考虑如下:

将numpy导入为np
df['signal']=np.where(df['Crossover'],np.where(df[f'EMA{emaShort}].lt(df[f'EMA{emaLong}]),'Sell','Buy'),'None')

您将以这种方式利用矢量化处理,这将使您的代码性能更好……

缩进是一个复制粘贴错误,我想至少我在atom中的代码缩进正确。你对这个问题的假设非常正确,所以谢谢你!。这叫什么,我可以用谷歌搜索你能给我一篇好文章的链接吗?lt做什么?
lt
-相当于
干杯我在我的代码中添加了一个编辑你有机会看一下吗?我遇到了一些麻烦,由于我是矢量化处理的新手,我有点卡住了。
signalList = []
for x, i in enumerate(df["Crossover"]):
    print("*" + str(x))
    if i == True:
        if df['EMA ' + str(emaShort)].iloc[x] > df['EMA ' + str(emaLong)].iloc[x]:
            signal = "Buy"
            signalList.append(signal)
        elif df['EMA ' + str(emaShort)].iloc[x] < df['EMA ' + str(emaLong)].iloc[x]:
            signal = "Sell"
            signalList.append(signal)
    elif i != True:
        signal = "None"
        signalList.append(signal)
df['EMA ' + str(emaShort)].iloc[x] == df['EMA ' + str(emaLong)].iloc[x]: