Python如何检查DataFrame字符串列是否包含指定关键词并新增标记列
解决DataFrame字符串包含关键词的标记问题
我懂你的需求啦——你想要给DataFrame新增一列,当指定列的字符串包含关键词列表里的任意一个关键词(还不区分大小写)时标记为True,但之前用iterrows搭配isin的方式只能做精确匹配,完全达不到包含匹配的效果对吧?咱们换个更高效的矢量化方法来实现:
核心方案:用str.contains结合正则匹配
Pandas的str.contains方法天生支持包含匹配,配合正则表达式可以轻松实现“匹配任意关键词+忽略大小写”的需求,而且比逐行循环的iterrows高效太多,尤其是数据量大的时候。
基础实现代码
假设你的目标列名为transaction_content(记得替换成你实际的列名),代码如下:
# 将关键词列表拼接成正则匹配模式,用|分隔表示“匹配任意一个” keyword_pattern = '|'.join(llst_transaction_keywords) # 新增标记列,case=False忽略大小写,na=False把缺失值标记为False(可按需调整) ldf_first_page['has_target_keyword'] = ldf_first_page['transaction_content'].str.contains( keyword_pattern, case=False, na=False )
处理含正则特殊字符的关键词
如果你的关键词列表里包含正则元字符(比如.、*、?这类),直接拼接会导致匹配异常,这时候需要先转义每个关键词:
import re # 转义每个关键词中的正则特殊字符 escaped_keywords = [re.escape(key) for key in llst_transaction_keywords] keyword_pattern = '|'.join(escaped_keywords) # 同样生成标记列 ldf_first_page['has_target_keyword'] = ldf_first_page['transaction_content'].str.contains( keyword_pattern, case=False, na=False )
为什么你的原代码不行?
你之前写的row.str.lower().isin(llst_transaction_keywords)是在做精确匹配——它会检查整行的字符串转小写后是否完全等于列表里的某一个关键词,而不是检查字符串里是否包含关键词,所以才不符合你的需求。
内容的提问来源于stack exchange,提问作者donny
相关产品推荐
相关产品推荐

