如何在Pandas DataFrame文本列中批量匹配词集并筛选行?
Pandas 快速筛选包含目标词集的行
直接利用Pandas的str.contains支持正则表达式的特性,把目标词集拼接成OR逻辑的正则模式,一次匹配就能完成筛选,完全不需要循环。
具体步骤与代码示例
- 导入依赖库
import pandas as pd import re
- 构造示例数据与目标词集
# 示例DataFrame df = pd.DataFrame({ 'text': [ '我喜欢吃苹果和梨', '今天买了香蕉', '只吃了葡萄', '橙子汁真好喝', pd.NA ], 'id': [1,2,3,4,5] }) # 目标匹配词集 S = ['苹果', '香蕉', '橙子']
- 生成正则匹配模式
把词集中的每个词汇转义(避免正则特殊字符干扰,比如.、*这类符号),再用|拼接成OR逻辑的正则串:
pattern = '|'.join(re.escape(word) for word in S)
- 执行筛选
# case=False 忽略大小写,na=False 过滤空值行 df_filtered = df[df['text'].str.contains(pattern, case=False, na=False)]
执行后df_filtered会保留所有text列包含苹果/香蕉/橙子的行。
进阶:精确匹配英文单词
如果是英文场景,需要匹配完整单词(避免"apples"被识别为包含"apple"),可以给正则加上单词边界\b:
# 适用于英文单词的精确匹配 pattern = r'\b(' + '|'.join(re.escape(word) for word in S) + r')\b' df_filtered = df[df['text'].str.contains(pattern, case=False, na=False)]
为什么这个方法更优
- 效率远高于循环匹配,尤其是数据量较大时,正则匹配是矢量化操作,内部优化更高效
- 自动处理词集中的特殊字符,避免正则语法冲突
- 支持大小写忽略、空值处理等灵活配置
内容的提问来源于stack exchange,提问作者rse
相关产品推荐
相关产品推荐

