Pandas:删除DataFrame中指定列不含指定文本的对应行的实现方法
Pandas筛选包含指定值的行实现方案
原有代码的问题
- 类型判断错误:
type(column) == object判断的是列名的类型,而非列的数据类型,正确写法应该是判断df[column].dtype == object - 逻辑错误:循环逐列筛选会不断覆盖DataFrame结果,最终只会保留最后一列符合条件的行,而非整行任意列符合条件的行
- 运算符误用:直接对两个DataFrame使用
|运算符不符合布尔索引的语法规范,应该对布尔筛选条件做或运算
正确实现代码
方案1:精确匹配单元格值为Keep或Save(适配你的示例需求)
该方案仅当单元格值完全等于Keep或Save时才会保留对应行,代码简洁效率最高:
# 构造需要匹配的关键词列表 keywords = ['Keep', 'Save'] # 筛选任意列包含关键词的行 filtered_df = df[df.isin(keywords).any(axis=1)]
方案2:模糊匹配单元格包含Keep或Save子串
如果需求是只要单元格内容包含这两个字符串就算符合条件,使用如下写法:
keywords = ['Save', 'Keep'] # 仅对文本类型列做包含匹配,任意列符合就保留该行 mask = df.select_dtypes(include='object').apply(lambda x: x.str.contains('|'.join(keywords), na=False)).any(axis=1) filtered_df = df[mask]
参数说明:
select_dtypes(include='object')只筛选文本类型列,避免数值列做字符串匹配报错na=False遇到空值直接返回False,不会抛出异常any(axis=1)表示整行只要有一个列符合条件就返回True,保留该行
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

