如何利用含百余个关键词的DataFrame实现Python的.str.contains匹配?
解决方案
核心思路
不用手动拼接关键词,直接把DF2里的关键词列自动转成str.contains能识别的正则表达式(用竖线|分隔多个关键词)就行。
代码实现
先明确两个DataFrame的列名:
- DF1里要匹配的目标列叫
target_col(对应你示例里的month) - DF2里存关键词的列叫
keywords
情况1:关键词里没有正则特殊字符(比如. * + ?这类)
直接拼接即可:
# 提取DF2的关键词,去掉空值后拼成正则串 pattern = '|'.join(df2['keywords'].dropna().astype(str)) # 在DF1里筛选包含任意关键词的行 matched_rows = df1[df1['target_col'].str.contains(pattern)] # 如果需要忽略大小写,加case=False参数: # matched_rows = df1[df1['target_col'].str.contains(pattern, case=False)]
情况2:关键词里有正则特殊字符
要是关键词里带.、*这类正则元字符(比如关键词是Jan.,直接拼会匹配Jan加任意字符),得先把这些字符转义:
import re # 逐个转义关键词里的正则特殊字符 escaped_keywords = [re.escape(key) for key in df2['keywords'].dropna().astype(str)] # 拼成正则串 pattern = '|'.join(escaped_keywords) # 执行匹配 matched_rows = df1[df1['target_col'].str.contains(pattern)]
注意点
dropna()必须加,不然DF2里的空值会导致正则串出问题astype(str)是为了确保所有关键词都是字符串类型,避免报错- 要不要加
case=False看你需求,需要区分大小写就去掉这个参数
内容的提问来源于stack exchange,提问作者Gaudham Pragadesh
相关产品推荐
相关产品推荐

