所以我有一个pandas数据框,并且正在使用iterrows()遍历每一行,对此做了一些复杂的工作。其中一部分涉及从下一行的坐标中减去当前行的坐标,所以我这样做
sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1
问题是当我完成所有行的迭代时,最后一行将给我一个索引错误,因为我将引用不存在的下一个索引。我正在考虑只是在数据帧的末尾添加一个虚拟行。是否有更优雅的解决方案来解决此问题?
编辑:
for index, row in df.iterrows():
if row[8] < 10 and sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1
#do stuff
答案 0 :(得分:0)
当行是最后一行时,您的代码试图访问不存在的(行+1),这就是为什么出现索引错误的原因。
运行循环以遍历除最后一行以外的所有行,然后当代码到达第二行时,它将访问最后一行。
尝试此代码
for i in range(len(df.index)-1): #runs from row 0 to n-2 rows if total rows are n
# your code
sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1