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

如何优雅地在Pandas DataFrame字符串列中检测多个子字符串?

更简洁的Pandas子字符串匹配方案

嘿,这种重复写一堆str.contains的情况确实够烦的!我之前处理公司名称识别的时候也踩过这个坑,给你分享几个更优雅的实现方式:

1. 正则表达式合并关键词(推荐)

利用正则的|操作符把所有后缀合并成一个模式,只需要一次str.contains调用就能搞定,而且提前统一转大写一次就够了,不用重复写:

# 先定义所有需要匹配的公司后缀列表,方便后续维护
company_suffixes = ['LIMITED', 'INC', 'CORP']
# 把列表转成正则匹配模式
pattern = '|'.join(company_suffixes)
# 一次完成大写转换+匹配
is_company = df['NAME'].str.upper().str.contains(pattern, regex=True)

如果担心误匹配(比如人名里刚好包含INC这类短后缀的子串),可以加上单词边界\b,确保只匹配完整的后缀单词:

pattern = r'\b(' + '|'.join(company_suffixes) + r')\b'
is_company = df['NAME'].str.upper().str.contains(pattern, regex=True)

这种方法是向量化操作,比循环或多次or判断效率高得多,尤其是处理大数据集的时候优势明显。

2. 用apply结合any(适合复杂匹配场景)

如果你的后缀匹配逻辑比较复杂(比如需要额外的条件判断),可以用apply配合生成器表达式:

company_suffixes = ['LIMITED', 'INC', 'CORP']
is_company = df['NAME'].str.upper().apply(
    lambda name: any(suffix in name for suffix in company_suffixes)
)

不过要注意,apply本质是逐行循环,数据量很大的时候性能不如正则方法,所以优先推荐第一种方案。

小提示

把后缀单独放在列表里还有个好处:后续要新增或修改后缀时,只需要修改列表就行,不用动匹配逻辑的代码,维护起来特别方便!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:43