Pandas处理CSV:定位多列不含指定数值的行及报错解决
解决CSV多列条件筛选的问题
先修复KeyError问题
你当前的Assignments是直接提取了除A/B/C外的子DataFrame,而不是列名列表。data[Assignments]这种写法会把整个DataFrame当作索引去查询,必然触发KeyError。先把Assignments改成目标列的名称集合:
# 正确获取目标列名列表 Assignments = data.columns[~data.columns.isin(['A', 'B', 'C'])]
筛选“未包含20”的行(两种常见场景)
得先明确你要的是哪种结果:
场景1:只要目标列中有一列不等于20,就保留该行
用any(axis=1)判断每行是否存在不符合条件的列:# 筛选目标列至少有一列≠20的行 filtered_data = data[(data[Assignments] != 20).any(axis=1)]场景2:目标列中所有列都不等于20,才保留该行
用all(axis=1)判断每行所有目标列都不满足等于20的条件:# 筛选目标列全≠20的行 filtered_data = data[(data[Assignments] != 20).all(axis=1)]
扩展条件:排除多个值(20、10、0)
针对两种场景分别处理:
场景1:目标列中只要有一列不在{0,10,20}里,就保留该行
反向使用isin()配合any(),逻辑更直观:# 筛选目标列至少有一列不在指定值中的行 filtered_data = data[(~data[Assignments].isin([0,10,20])).any(axis=1)]场景2:目标列所有列都不在{0,10,20}里,才保留该行
用all()确保每行所有目标列都不符合指定值:# 筛选目标列全不在指定值中的行 filtered_data = data[(~data[Assignments].isin([0,10,20])).all(axis=1)]
内容的提问来源于stack exchange,提问作者programmingbeginner
相关产品推荐
相关产品推荐

