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

Pandas DataFrame自定义学历列表匹配函数无法输出正确匹配结果

问题修复方案

错误根源

  • 自定义匹配函数逻辑完全错误:循环内any语句重复声明了循环变量match,判断规则变为只要预设列表中任意一项存在于目标文本的拆分词中,就把当前遍历的所有预设项都加入结果,和逐一枚举匹配的需求完全不符;同时把目标文本按空格拆分为单个词,无法匹配Bachelor's Degree这类包含空格的多词学历项。
  • 预设学历列表存在冗余空格:NiTEC 末尾带有多余空格,若目标文本中NiTEC后无空格会出现匹配失败的情况。

修复后代码

1. 修正匹配函数

def returnhits(a_list, long_string):
    matches = []
    for qual in a_list:
        # 先去除学历项的前后冗余空格,再判断完整学历是否存在于目标文本中
        cleaned_qual = qual.strip()
        if cleaned_qual in long_string:
            matches.append(cleaned_qual)
    return ' , '.join(matches)

2. 优化预设学历列表(去除冗余空格)

qualification_list = ('Professional Certificate', 'NiTEC', "Bachelor's Degree", 'Diploma', 'Advanced/Higher/Graduate Diploma', 'Post Graduate Diploma' , 'Professional Degree', "Master's Degree" , 'Doctorate (PhD)')

3. 原有调用逻辑无需修改

df['Qualifications'] = df['Other information'].apply(lambda x : returnhits(qualification_list, x))

可选进阶优化

如果需要避免短学历项被误匹配(比如Diploma同时匹配到Diploma和Post Graduate Diploma导致重复命中),可以加入最长匹配优先规则和正则词边界匹配,避免部分匹配的问题:

import re

def returnhits(a_list, long_string):
    matches = []
    # 按学历项长度降序排列,优先匹配更长的学历,避免短项先匹配导致重复
    sorted_quals = sorted(a_list, key=lambda x: len(x.strip()), reverse=True)
    for qual in sorted_quals:
        cleaned_qual = qual.strip()
        # 正则匹配完整词边界,避免部分字符匹配
        if re.search(rf'\b{re.escape(cleaned_qual)}\b', long_string):
            matches.append(cleaned_qual)
    return ' , '.join(matches)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:24:02