Pandas中re.findall(re.IGNORECASE)无法匹配大写关键词求助
解决DataFrame文本列不区分大小写的关键词精确匹配问题
问题原因
你的代码失效是因为:re.findall提取的单词会保留原文本的大小写(比如原文本是HOAX,提取结果就是HOAX),但关键词列表里都是小写,直接用i in keywords自然匹配不上。
两种修复方案
方案一:统一转小写后匹配
把提取出的单词转为小写,再和关键词列表对比:
import re import pandas as pd keywords = ['fake', 'hoax', 'misleading'] df2 = df1[df1.text.apply(lambda x: any(i.lower() in keywords for i in re.findall('\w+', x)))]
方案二:正则直接匹配(更高效)
构建不区分大小写的正则模式,同时用\b确保匹配完整单词(避免误匹配hoaxer这类包含关键词的长单词):
import re import pandas as pd keywords = ['fake', 'hoax', 'misleading'] # 拼接正则规则:匹配任意关键词,单词边界,不区分大小写 pattern = re.compile(r'\b(' + '|'.join(keywords) + r')\b', flags=re.IGNORECASE) df2 = df1[df1.text.str.contains(pattern)]
方案对比
- 方案一逻辑简单直观,适合快速修改;
- 方案二利用Pandas内置的
str.contains,执行效率更高,且能避免部分匹配的问题。
内容的提问来源于stack exchange,提问作者mOna
相关产品推荐
相关产品推荐

