如何在Pandas DataFrame中筛选并删除指定列数据超范围的行
解决Pandas多列筛选删除行的问题
你的代码问题出在没有明确判断每行是否存在任意一列超出范围,直接用多列布尔矩阵索引会导致逻辑偏差,甚至误删所有行。以下是正确的实现方式:
方法一:直接筛选保留符合条件的行
先对目标列(99个整数列)进行范围判断,生成布尔矩阵,再用any(axis=1)标记出存在超出范围值的行,最后取反保留合规行:
# 生成布尔矩阵:每个元素表示对应单元格是否超出范围 out_of_range = (my_data[column_name_list] < 0) | (my_data[column_name_list] > 500) # 标记每行是否有任意一列超出范围 has_bad_value = out_of_range.any(axis=1) # 保留所有无超出范围值的行 my_data = my_data[~has_bad_value]
方法二:获取待删除索引再删除
如果你习惯用drop方法,逻辑和上面一致,先筛选出需要删除的行索引:
out_of_range = (my_data[column_name_list] < 0) | (my_data[column_name_list] > 500) drop_list = my_data[out_of_range.any(axis=1)].index my_data = my_data.drop(drop_list)
关键逻辑说明
(my_data[column_name_list] < 0) | (my_data[column_name_list] > 500):生成一个和原DataFrame行数相同、列数为99的布尔矩阵,每个单元格对应是否超出范围。.any(axis=1):按行判断,只要该行有任意一个单元格为True(即存在超出范围的值),就返回True,最终得到一个和行数相同的布尔Series。~has_bad_value:对布尔Series取反,得到所有合规行的标记。
内容的提问来源于stack exchange,提问作者jetson485
相关产品推荐
相关产品推荐

