我在以下代码中收到错误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]列表。但这是行不通的,而且我不知道自己在做什么错。
答案 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()