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

Pandas中如何匹配由两个独立单词组成的字符串

问题根因

原函数先将输入文本按空格拆分为单个单词组成的列表,仅能匹配刚好为单个单词的地名。多单词构成的地名本身包含空格,属于多词组合的字符串,不可能出现在拆分后的单个词列表中,因此无法命中。

代码调整方案

核心修改逻辑是取消提前拆分输入文本的步骤,直接在原始输入字符串中做子串匹配,即可支持2个及以上单词组成的地名,同时可按需补充大小写兼容、长地名优先匹配的能力,避免漏匹配、误匹配。

基础版本(严格匹配大小写)

直接遍历地名列表判断是否为输入文本的子串,无额外依赖,逻辑最简单:

# alpha_list 为存储所有国家、美国州名的预置列表
def locate_country(b):
    match_res = [place for place in alpha_list if place in b]
    return match_res

df['country'] = df['locations'].apply(locate_country)

兼容大小写版本

解决输入文本和预置地名列表大小写不一致导致的匹配失败问题(比如输入为new york、列表存储为New York的场景),匹配完成后返回原始格式的地名:

# 预处理:生成对应小写格式的地名列表,用于无大小写匹配
alpha_lower = [p.lower() for p in alpha_list]

def locate_country(b):
    b_low = b.lower()
    match_res = []
    for idx, p_low in enumerate(alpha_lower):
        if p_low in b_low:
            match_res.append(alpha_list[idx])
    return match_res

df['country'] = df['locations'].apply(locate_country)

防误匹配优化版本

如果存在短地名是长地名子串的场景(比如同时存在地名york和new york),可以先将地名按词数从多到少排序,优先匹配长地名,避免短词提前误命中:

# 按地名包含的单词数降序排序,长地名优先参与匹配
alpha_sorted = sorted(alpha_list, key=lambda x: len(x.split()), reverse=True)
alpha_lower = [p.lower() for p in alpha_sorted]

def locate_country(b):
    b_low = b.lower()
    match_res = []
    for idx, p_low in enumerate(alpha_lower):
        if p_low in b_low:
            match_res.append(alpha_sorted[idx])
    return match_res

df['country'] = df['locations'].apply(locate_country)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:18:06