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

如何使用Python清洗DataFrame中的姓名列并基于参考表标准化姓名?

高效清洗姓名并匹配参考表的解决方案

针对你的姓名清洗需求,结合参考表规模很小的特性,我们可以通过文本预处理+高效近似匹配的组合来实现,比单纯模糊匹配更高效,具体步骤如下:

步骤1:文本预处理

先统一姓名格式,减少不必要的变体差异,这能大幅降低后续匹配的复杂度:

  • 转小写:消除大小写差异
  • 去除非字母字符:比如去掉句号.这类无关符号
  • 压缩连续重复字符:把adammm这类多重复字符的姓名简化为adam,进一步缩小和标准姓名的差距
import pandas as pd
import re

# 初始化你的数据
df = pd.DataFrame(columns=['Name'])
df['Name'] = ['Aadam','adam','AdAm','adammm','Adam.','Bethh','beth.','beht','Beeth','Beth']
ref = pd.DataFrame(columns=['Cleaned Names'])
ref['Cleaned Names'] = ['adam','beth']

# 预处理函数
def preprocess_name(name):
    # 转小写
    name = name.lower()
    # 去除非字母字符
    name = re.sub(r'[^a-z]', '', name)
    # 压缩连续重复字符(比如aaa→a)
    name = re.sub(r'(.)\1+', r'\1', name)
    return name

# 应用预处理
df['Processed Name'] = df['Name'].apply(preprocess_name)

预处理后,df['Processed Name']的结果为:
['aadam', 'adam', 'adam', 'adam', 'adam', 'beth', 'beth', 'beht', 'beth', 'beth']

步骤2:高效匹配参考表

因为参考表只有2个标准姓名,我们可以直接为每个预处理后的姓名计算与标准名的相似度,取相似度最高的结果即可。这里提供两种实现方式:

方法1:使用fuzzywuzzy(简洁高效)

fuzzywuzzy是专门做模糊匹配的工具,语法简洁,适合小规模场景:

from fuzzywuzzy import process

# 定义匹配函数
def match_clean_name(name):
    # 从参考表中提取最匹配的姓名
    match, score = process.extractOne(name, ref['Cleaned Names'])
    # 若需严格匹配可设置阈值(比如score>80才返回),这里数据差异小直接返回结果
    return match

df['Name Corrected'] = df['Processed Name'].apply(match_clean_name)

方法2:使用内置difflib(无需额外安装)

如果不想安装第三方库,用Python内置的difflib也能实现:

from difflib import SequenceMatcher

def match_clean_name(name):
    max_score = 0
    best_match = None
    for clean_name in ref['Cleaned Names']:
        score = SequenceMatcher(None, name, clean_name).ratio()
        if score > max_score:
            max_score = score
            best_match = clean_name
    return best_match

df['Name Corrected'] = df['Processed Name'].apply(match_clean_name)

最终得到的df['Name Corrected']完全符合你的预期:
['adam','adam','adam','adam','adam','beth','beth','beth','beth','beth']

效率说明

  • 当参考表规模极小时(比如你的案例只有2个值),这种方法的效率远高于全量模糊匹配,因为每个姓名仅需和2个标准名计算相似度。
  • 如果后续数据量扩大到十万级以上,可以换成rapidfuzz(fuzzywuzzy的C语言实现版本),能进一步提升匹配速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:47:48