You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas实现句子列不区分大小写匹配行内关键词

基于Pandas的逐行关键词不区分大小写匹配实现

需求说明

逐行校验Sentence列的句子文本,不区分大小写判断是否包含对应行Keyword列中的任意关键词,最终在DataFrame中新增Match列存储布尔类型的匹配结果。

问题根因

从CSV导入数据时,原列表类型的Keyword列会被自动转换为带多余空格、包裹符号的字符串。此时直接调用str.join('|')拼接正则规则时,字符串会被作为字符级可迭代对象处理,最终在每个单字符之间插入|,完全无法得到预期的关键词拼接规则。

测试基准代码

import pandas as pd

Sentence = ["Clear is very good","Fill- low light, compact","stripping topsoil"]
Keyword =[['Clearing', 'grubbing','clear','grub'],['Borrow,', 'Fill', 'and', 'Compaction'],['Fall']]
 
df = pd.DataFrame({'Sentence': Sentence, 'Keyword': Keyword})

预期输出的Match列取值为:[True, True, False]

完整实现方案

场景1:Keyword列本身为列表类型(如手动构造DataFrame场景)

直接逐行做小写转换后的子串判断即可,无需额外格式处理:

df['Match'] = df.apply(
    lambda row: any(single_kw.lower() in row['Sentence'].lower() for single_kw in row['Keyword']),
    axis=1
)

场景2:CSV导入后Keyword列为字符串类型

先完成字符串到关键词列表的还原清洗,再执行匹配逻辑:

def parse_keyword_string(kw_content):
    # 去除列表包裹符、首尾多余空格
    clean_content = kw_content.strip("[] ")
    # 按逗号拆分关键词,逐个去除多余的引号、空格
    kw_list = [item.strip(" '\"") for item in clean_content.split(",")]
    # 过滤拆分产生的空值
    return [kw for kw in kw_list if kw]

# 先把字符串格式的Keyword还原为列表
df['Keyword'] = df['Keyword'].apply(parse_keyword_string)
# 执行逐行匹配
df['Match'] = df.apply(
    lambda row: any(single_kw.lower() in row['Sentence'].lower() for single_kw in row['Keyword']),
    axis=1
)

结果验证

执行代码后输出的DataFrame如下,完全符合预期:

SentenceKeywordMatch
Clear is very good['Clearing', 'grubbing', 'clear', 'grub']True
Fill- low light, compact['Borrow,', 'Fill', 'and', 'Compaction']True
stripping topsoil['Fall']False

扩展提示:如果需要避免短关键词误匹配长单词的部分子串,可以把匹配逻辑替换为带词边界\b的正则规则,实现整词匹配。

内容的提问来源于stack exchange,提问作者Joe Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:24:16