如何用正则在Pandas DataFrame中匹配完整关键词而非部分匹配
解决方法
要匹配完整单词,核心是给每个关键词加上正则单词边界\b,它会精准匹配单词的起始或结束位置,彻底避免booking识别出book、training识别出train这类部分匹配的情况。
修改后的代码
import numpy as np import pandas as pd keywords = ['book','train','job'] # 给每个关键词包裹单词边界,构建正则匹配模式 pattern = r'\b(' + '|'.join(keywords) + r')\b' # 指定需要搜索的目标列 target_cols = ['title', 'scope', 'description', 'review'] # 简化多列判断逻辑:只要任意一列匹配到完整关键词,就标记为1 df["NewValue"] = np.where( df[target_cols].apply(lambda col: col.str.contains(pattern, regex=True)).any(axis=1), 1, 0 )
关键细节说明
\b是正则中的单词边界,它匹配的是字母/数字/下划线与非单词字符(比如空格、标点)之间的位置,确保只有独立存在的book、train才会被命中。- 用
df[target_cols].apply(...)批量处理所有目标列,any(axis=1)表示只要当前行的任意一列匹配成功,就返回True,最后通过np.where转换成1/0的标记值。 - 如果你的文本包含带特殊符号的单词(比如
full-time),可以根据实际情况调整边界规则,但针对普通关键词,\b完全能满足需求。
内容的提问来源于stack exchange,提问作者fromthedark
相关产品推荐
相关产品推荐

