Python中如何删除DataFrame多列含指定字符串的记录?
解决多列删除含指定字符串记录的问题
首先说你的代码报错原因:
- 多列索引方式错误:Pandas中选择多列必须用双层方括号包裹列名列表,也就是
df1[['Size','Current Ver','Android Ve']],你用的单层方括号加逗号属于元组索引,会直接引发错误。 - 多列
str.contains的返回值处理错误:直接对多列调用str.contains会得到一个布尔型DataFrame,直接和==False比较后仍是二维布尔矩阵,无法直接用于行筛选,必须先把每行的结果合并为单个布尔值。
下面给你两种常用处理方式,按需选择:
方式一:删除任意指定列含目标字符串的行
只要某一行的Size/Current Ver/Android Ve任意一列存在Varies with device,就删除该行:
# 生成布尔矩阵,标记每个单元格是否包含目标字符串 mask = df1[['Size', 'Current Ver', 'Android Ve']].apply(lambda col: col.str.contains('Varies with device')) # ~mask.any(axis=1) 表示保留所有指定列都不含目标字符串的行 df2 = df1[~mask.any(axis=1)]
方式二:删除所有指定列都含目标字符串的行
仅当某一行的三个指定列全部是Varies with device时才删除该行:
mask = df1[['Size', 'Current Ver', 'Android Ve']].apply(lambda col: col.str.contains('Varies with device')) # ~mask.all(axis=1) 表示保留不是所有指定列都含目标字符串的行 df2 = df1[~mask.all(axis=1)]
补充小技巧:如果需要检查DataFrame所有列是否存在目标字符串,不用指定列名列表,直接写df1.apply(lambda col: col.str.contains('Varies with device'))即可。
内容的提问来源于stack exchange,提问作者varsach
相关产品推荐
相关产品推荐

