python - 在迭代时引用下一个索引时避免索引错误
问题描述
所以我有一个 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
解决方案
当行是最后一行时,您的代码尝试访问不存在的 (row+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
推荐阅读
- laravel-5 - Exclude special characters from title to use it as a file name?
- c++ - 从数据集 blob 字段打开和编辑文件
- java - 如何使 JPA 列仅在 JUnit 测试期间可插入?
- regex - 使用 RegEx 查找、删除和包装部分 url
- c# - DevExpress XtraGrid 在使用 CustomDrawCell 时动态改变列宽
- r - 如何在不丢失小数的情况下将数据框中的字符转换为数字
- leaflet - Leaflet KNN 查找最近的标记
- marklogic - 如何在 Apache NiFi 中使用 Query Marklogic 处理器在结构化查询中使用变量/函数?
- javascript - 如何在 Summernote 的 onEnter 回调中调用 shift+enter 事件?
- javascript - 在 React js 中实现搜索