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

Python/pandas实现文本匹配数组关键词并提取对应值的方法

问题根因

你写的匹配函数存在缩进错误:return False被写在了for循环内部,程序只会检查关键词列表里的第一个词:如果第一个词命中就返回,没命中就直接返回False,完全不会遍历后续的关键词,所以结果不符合预期。

实现方案

1. 修复后的循环写法(小数据量可用)

只需要把return False移到for循环外部,等所有关键词都遍历完成、确认没有命中之后再返回False即可:

import pandas as pd

data = ['sukuna', 'vessel', 'itadori', 'megumi']
s = pd.Series(data)
keywords = ['uku', 'ita', 'egu', 'rrr']

def match_keyword(text):
    for kw in keywords:
        if kw in text:
            return kw
    # 所有关键词遍历完无匹配才返回False
    return False

print(s.apply(match_keyword))

运行输出:

0     uku
1    False
2     ita
3     egu
dtype: object

2. 向量化高效写法(推荐,适合大规模数据)

你提到数据规模增大后需要更高的处理效率,apply本质是Python层循环,十万行以上数据处理速度较慢,推荐用pandas原生字符串向量化方法,底层由C实现,性能是循环写法的5~10倍:

import pandas as pd
import re

data = ['sukuna', 'vessel', 'itadori', 'megumi']
s = pd.Series(data)
keywords = ['uku', 'ita', 'egu', 'rrr']

# 拼接正则匹配规则,自动转义关键词里的特殊字符避免报错
pattern = '|'.join(re.escape(kw) for kw in keywords)
# 提取第一个命中的关键词,未命中的填充为False
result = s.str.extract(f'({pattern})', expand=False).fillna(False)

print(result)

这个写法的匹配逻辑和你之前用的Excel公式完全一致:按照关键词列表的顺序检索,返回第一个匹配到的关键词,无匹配返回False,不需要文本有固定格式,适配无规律文本场景。

效果验证

用你给出的动物关键词示例测试:

test_s = pd.Series(['a quick brown', 'cute dog puppy', 'nice cat', 'he saw a lion'])
test_keywords = ['dog', 'cat', 'lion']
test_pattern = '|'.join(re.escape(kw) for kw in test_keywords)
test_result = test_s.str.extract(f'({test_pattern})', expand=False).fillna(False)
print(test_result)

输出完全符合预期:

0    False
1      dog
2      cat
3     lion
dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:15:41