如何在Python Pandas生成新列时实现关键词部分匹配
实现关键词部分匹配的修改方案
你的原代码是基于精确单词匹配(按空格拆分文本后匹配整个单词),所以无法捕捉关键词作为子串出现的情况(比如dinner出现在dinner-party里)。要实现部分匹配,我们需要检查每个关键词是否存在于小写后的描述文本中,而不是局限于完整单词。
修改后的代码
import pandas as pd data = pd.read_excel('path_to_datafile.xlsx') keywords = ['dinner','government','Agents','entertainment','Agent'] keywords_lower = [item.lower() for item in keywords] # 用集合推导式收集所有匹配的关键词(自动去重),再用/连接 data['Keyword'] = data['Description'].apply( lambda x: '/'.join({kw for kw in keywords_lower if kw in x.lower()}) )
代码解释
- 统一大小写:把关键词和描述文本都转成小写,避免大小写敏感的问题(比如
Agent和agent都会被匹配)。 - 部分匹配检查:遍历每个小写关键词,判断它是否是小写后描述文本的子串——这就实现了部分匹配,不管关键词是单独单词还是嵌入在其他字符串中。
- 去重与连接:用集合推导式自动去除重复的匹配结果(比如如果
Agent和Agents都匹配同一段文本,会自动去重),最后用/分隔符连接所有匹配的关键词。
可选优化:保留原关键词大小写
如果你希望输出的关键词保留原列表中的大小写(比如匹配到Agents就显示Agents而不是agents),可以稍微调整代码,遍历原关键词并同时检查小写形式:
data['Keyword'] = data['Description'].apply( lambda x: '/'.join({kw for kw in keywords if kw.lower() in x.lower()}) )
这样,当描述文本中出现agent时,会匹配到原关键词列表里的Agent和Agents,并保留它们的原始大小写输出。
内容的提问来源于stack exchange,提问作者Rahul rajan
相关产品推荐
相关产品推荐

