如何从pandas DataFrame列中提取匹配指定列表的首个关键词?
代码修改方案
原代码问题根源
- 多结果返回:原逻辑会提取所有匹配到的关键词并拼接,没有做首个匹配的截断逻辑
- 短语/末尾匹配失败:两个原因:一是对title做了按空格切分的操作,多词组成的关键词(比如
Deep learning)不可能匹配到单个切分词;二是没有统一大小写,列表关键词和title的大小写差异也会导致匹配失败,切分操作也会导致末尾带标点的关键词匹配失败。
修改后代码
mi_lista = ['Automata', 'Pearls', 'Deep learning', 'Patterns'] # 预生成小写关键词列表,用于大小写不敏感匹配 lower_kw = [kw.lower() for kw in mi_lista] def match_first_keyword(title): title_lower = title.lower() # 按列表顺序遍历,找到第一个匹配项直接返回 for i, kw in enumerate(lower_kw): if kw in title_lower: return mi_lista[i] # 无匹配时返回空字符串,可按需调整为None等默认值 return '' # 插入新列 df.insert(1, "list", df['title'].apply(match_first_keyword), True)
逻辑说明
- 匹配优先级完全遵循
mi_lista的关键词排序,排在前面的关键词会优先被匹配,可通过调整列表顺序自定义优先级 - 不再拆分title字符串,直接判断完整关键词是否存在,支持多词短语匹配、任意位置的关键词匹配(包括开头、中间、末尾)
- 统一转换为小写匹配,避免大小写差异导致的匹配失败,返回结果保留
mi_lista中关键词的原大小写格式
内容的提问来源于stack exchange,提问作者ivanTenryu
相关产品推荐
相关产品推荐

