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

如何用Levenshtein距离修正Pandas数据框列中的拼写错误?

修正Pandas单列姓名拼写错误的解决方案

下面提供两种基于相似度匹配的实现方案,分别使用Levenshtein距离和模糊匹配方法来统一拼写错误的姓名。

方法一:基于Levenshtein距离的聚类替换

Levenshtein距离(编辑距离)可以衡量两个字符串的差异程度,我们通过设定阈值将相似姓名聚类,并用每类中出现频率最高的姓名作为标准名替换。

步骤与代码

  1. 安装依赖库:
pip install pandas python-Levenshtein
  1. 实现代码:
import pandas as pd
from Levenshtein import distance
from collections import defaultdict

# 初始化数据框
df = pd.DataFrame({'NAME': ['robert', 'robert', 'robrt', 'marie', 'ann']})

def cluster_similar_names(names, threshold=2):
    # 按姓名出现频率降序排列,优先用高频姓名作为聚类基准
    name_counts = names.value_counts().sort_values(ascending=False)
    clusters = defaultdict(list)
    used_names = set()
    
    for base_name in name_counts.index:
        if base_name in used_names:
            continue
        # 筛选所有与基准名编辑距离小于等于阈值的姓名
        cluster_members = [name for name in names.unique() if distance(base_name, name) <= threshold]
        for name in cluster_members:
            used_names.add(name)
            clusters[base_name].append(name)
    return clusters

# 生成姓名聚类映射
name_clusters = cluster_similar_names(df['NAME'])
name_mapping = {}
for standard_name, variants in name_clusters.items():
    for variant in variants:
        name_mapping[variant] = standard_name

# 替换原数据中的姓名
df['NAME'] = df['NAME'].map(name_mapping)
print(df)

运行后输出结果:

NAME
0  robert
1  robert
2  robert
3   marie
4     ann

方法二:使用fuzzywuzzy进行模糊匹配替换

fuzzywuzzy库可直接计算字符串相似度,并返回最匹配的结果,适合快速实现姓名修正。

步骤与代码

  1. 安装依赖库:
pip install pandas fuzzywuzzy python-Levenshtein
  1. 实现代码:
import pandas as pd
from fuzzywuzzy import process

# 初始化数据框
df = pd.DataFrame({'NAME': ['robert', 'robert', 'robrt', 'marie', 'ann']})

# 提取出现频率最高的姓名作为候选匹配集
candidate_names = df['NAME'].value_counts().index.tolist()

def correct_name(name):
    # 匹配最相似的候选姓名,设定相似度阈值(80分)
    match, similarity_score = process.extractOne(name, candidate_names)
    return match if similarity_score >= 80 else name

# 批量修正姓名
df['NAME'] = df['NAME'].apply(correct_name)
print(df)

注意事项

  • 阈值调整:根据姓名长度和错误类型调整阈值,短姓名建议设较小阈值(如1-2),长姓名可适当提高;模糊匹配的相似度阈值可根据需求调整(通常70-90)。
  • 基准优先级:优先用出现频率高的姓名作为基准,避免将正确姓名替换为错误变体。
  • 性能优化:如果数据量较大,建议先对姓名去重后计算相似度,减少不必要的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:36