如何通过iterrows遍历DataFrame查找负数对应的行列位置
查找Pandas DataFrame中所有负值的位置
你当前用iterrows()逐行遍历的思路是可行的,只需要补全内部的数值判断逻辑即可,另外也提供数据量更大时更推荐的高效实现方案。
基于iterrows()的遍历实现
iterrows()每次循环返回两个值:第一个是当前行的索引,第二个是存储当前行所有列值的Series对象。你只需要在循环内再遍历每行的列名和对应值,判断值小于0时记录位置即可,代码如下:
for row_index, row_content in dataframe.iterrows(): for col_name, cell_value in row_content.items(): if cell_value < 0: # 按需要输出或者存储结果即可 print(f"行索引:{row_index},列名:{col_name},负值:{cell_value}")
针对你给出的示例数据,运行后输出结果为:
行索引:abc,列名:456,负值:-9.7 行索引:qwe,列名:123,负值:-6.0
高效向量化实现(推荐大数据量场景使用)
iterrows()是逐行循环的实现,数据量较大时运行效率很低,用Pandas原生的向量化操作可以一次性筛选出所有负值位置,性能提升非常明显:
# 生成布尔掩码,值为True的位置对应原数据中的负值 negative_mask = dataframe < 0 # 提取所有负值对应的(行索引, 列名)元组列表 negative_positions = negative_mask.stack()[lambda x: x].index.tolist() # 遍历输出结果 for row_idx, col in negative_positions: print(f"行索引:{row_idx},列名:{col},负值:{dataframe.loc[row_idx, col]}")
运行输出和遍历方法完全一致。
内容的提问来源于stack exchange,提问作者Spiinner
相关产品推荐
相关产品推荐

