You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas按包含/排除词列表过滤DataFrame行?

Pandas按关键词/短语筛选并移除指定行的实现方案

优化包含(include)筛选逻辑

别用循环拼接的低效方法,直接用str.contains结合正则表达式,代码更简洁且执行效率更高:

import pandas as pd

# 假设原始数据为df,包含目标列Message
include = ['word1', 'word2', 'word3']
# 将include列表转为正则匹配模式,匹配任意包含项
include_regex = '|'.join(include)
# 筛选包含任意关键词/短语的行,na=False处理空值,case=False忽略大小写(按需调整)
filtered_df = df[df['Message'].str.contains(include_regex, case=False, na=False)]
# 去重(如果业务需要)
filtered_df = filtered_df.drop_duplicates()

正确实现排除(exclude)行的逻辑

之前用~取反失败,大概率是正则匹配逻辑或空值处理的问题,以下是可靠的实现方式:

基础版:排除包含任意exclude项的行

exclude = ['word4', 'word5 word6']
exclude_regex = '|'.join(exclude)
# 取反筛选,移除包含任意排除项的行
final_df = filtered_df[~filtered_df['Message'].str.contains(exclude_regex, case=False, na=False)]

精确匹配版:避免部分匹配

如果需要确保完全匹配短语(比如不想误删包含word5 word6xxx的行),给每个短语添加单词边界并转义正则特殊字符:

import re
# 对每个短语转义(避免正则特殊字符干扰)并添加单词边界
exclude_regex = '|'.join([rf'\b{re.escape(phrase)}\b' for phrase in exclude])
final_df = filtered_df[~filtered_df['Message'].str.contains(exclude_regex, case=False, na=False)]

常见问题排查

  • 空值处理:必须添加na=False,否则Message列的NaN值会导致筛选结果出现无效行,破坏逻辑
  • 大小写敏感:默认case=True区分大小写,可根据业务需求调整该参数
  • 正则特殊字符:如果关键词/短语包含.、*、?等正则特殊符号,一定要用re.escape()转义,否则会出现匹配错误

内容的提问来源于stack exchange,提问作者Joshua Hey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:30:00