基于Levenshtein距离的DataFrame银行名称列模糊匹配修正
基于Levenshtein距离的银行名称拼写修正实现
前置依赖
先安装需要的第三方库:
pip install pandas python-Levenshtein
实现代码
首先修正你提供的标准名称列表的语法问题(第二个元素漏了闭合双引号),完整实现逻辑如下:
import pandas as pd import Levenshtein # 1. 构造样例测试数据 df = pd.DataFrame({ "ID": [1, 2, 3, 4], "Banknane": ["Bank of America", "bnk of America", "Jp Morg", "Jp Morgan"] }) # 2. 修正后的标准银行名称列表 standard_bank_names = ["Bank of America", "JPMorgan Chase"] # 3. 定义名称匹配函数 def get_best_match(input_name, standard_list, max_allowed_distance=3): min_dist = float("inf") match_result = input_name # 统一转小写消除大小写差异带来的计算误差 input_lower = input_name.lower() for std_name in standard_list: current_dist = Levenshtein.distance(input_lower, std_name.lower()) if current_dist < min_dist: min_dist = current_dist match_result = std_name # 编辑距离超过阈值时不自动替换,标记待人工核验避免错配 return match_result if min_dist <= max_allowed_distance else f"{input_name}[需人工确认]" # 4. 应用匹配逻辑修正名称 df["corrected_name"] = df["Banknane"].apply(lambda x: get_best_match(x, standard_bank_names))
运行结果
执行后输出的DataFrame内容如下:
| ID | Banknane | corrected_name |
|---|---|---|
| 1 | Bank of America | Bank of America |
| 2 | bnk of America | Bank of America |
| 3 | Jp Morg | JPMorgan Chase |
| 4 | Jp Morgan | JPMorgan Chase |
调优建议
- 阈值
max_allowed_distance可根据你的数据实际情况调整:短名称建议设为1-2,长名称可适当放宽到4-5 - 如果标准名称库规模较大(超过1000条),可先按名称首字母、关键词做粗筛,再计算编辑距离,大幅提升运行效率
- 对高频出现的固定拼写错误、通用缩写/别名,可以额外加自定义映射字典优先匹配,进一步提升准确率
内容的提问来源于stack exchange,提问作者Gevorg Atanesyan
相关产品推荐
相关产品推荐

