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

如何在pandas中匹配多格式学位文本并实现准确独热编码

解决方案

核心思路

先做文本标准化消除格式差异,再用全匹配代替模糊匹配避免子串误判。

具体实现步骤

  1. 文本标准化处理
    统一去除学位字符串中的所有非字母字符、统一转为小写,解决不同书写变体的匹配问题。比如Ph. D、ph.d都会被处理为phd,B.Sc.会被处理为bsc。
  2. 精准分类匹配
    定义不同学位类型对应的标准化后关键词列表,用isin做全值匹配,彻底避免MBA包含BA这类子串误判问题。
  3. 生成独热编码列
    根据匹配结果直接生成对应的0/1标记列。

完整代码示例

import pandas as pd

# 示例数据
data = {'Name': ['Alice','Bob','Chris','David'],
    'Degree': ['phd','BA','MBA','B.Sc.']
    }
df = pd.DataFrame(data, columns = ['Name', 'Degree'])

# 1. 学位文本标准化:去掉所有非字母字符,转小写
df['degree_norm'] = df['Degree'].str.replace(r'[^a-zA-Z]', '', regex=True).str.lower()

# 2. 定义各学位类型对应的标准化关键词,可随时扩展变体
degree_rules = {
    'is_bachelors': ['ba', 'bsc'], # 新增学士学位变体直接往列表内添加即可
    'is_masters': ['ma', 'mba', 'msc'],
    'is_phd': ['phd']
}

# 3. 生成独热编码列
for col, keywords in degree_rules.items():
    df[col] = df['degree_norm'].isin(keywords).astype(int)

# 可选:删除中间字段输出最终结果
df = df.drop(columns=['Degree', 'degree_norm']).reset_index(drop=True)
print(df)

输出结果

运行上述代码后得到的结果和预期完全一致:

Name  is_bachelors  is_masters  is_phd
0  Alice             0           0       1
1    Bob             1           0       0
2  Chris             0           1       0
3  David             1           0       0

扩展说明

如果后续遇到新的学位书写变体,只需要把标准化后的对应关键词加到对应类型的列表里即可,不需要修改匹配逻辑,维护成本很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:45:03