熊猫数据框产生KeyError:-1

时间:2019-12-28 16:44:15

标签: python pandas

我在以下代码中收到错误KeyError: -1

u = []

for i in range(len(df['Some column'])):
   if df['Some column'][i] > df['Some column'][i-1]:
      u.append(df['Some column'][i])

print(u)

这是一个熊猫数据框,在这里我尝试打印出比上一个索引[i-1]大的索引[i]列表。但这是行不通的,而且我不知道自己在做什么错。

3 个答案:

答案 0 :(得分:2)

开始循环时,i等于0,因此i-1等于-1,这可能不在索引中。

您可以尝试

u = []

for i in range(1, len(df['Some column'])):
   if df['Some column'][i] > df['Some column'][i-1]:
      u.append(df['Some column'][i])

print(u)

答案 1 :(得分:1)

不要使用循环,您会失去熊猫的核心功能,而这正是利用矢量化解决方案的优势。

我们可以使用shift.tolist获取您想要的结果。

import numpy as np
import pandas as pd

np.random.seed(50)

df = pd.DataFrame({'data' : np.random.randint(0,500,size=500)})

u = df.loc[df['data'] > df['data'].shift(-1)]['data'].tolist()

print(u)
out:
[480, 289, 478, 229, 278, 258, ...]
len(u)
out:
244

答案 2 :(得分:0)

原因可能是因为数据帧的索引可能没有从0到range(df)完美排序。也就是说,您的索引不一定是1、2、3、4,...,N。如果您的索引是这样的:

1, 2, 30, 34, 45, 48, 50

然后,当您运行 for循环时,会出现此错误。您可能想先尝试一下:

df = df.reset_index()
相关问题