Skip to main content
 首页 » 编程设计

python之使用 pandas 和 fuzzwuzzy 匹配相似的列元素

2025年05月04日17lidabo

我有一个 Excel 文件,其中一列包含 1000 多个公司名称,另一列包含大约 20,000 个公司名称。

目标是匹配尽可能多的名字。问题是第一列 (1000+) 中的名称格式不正确,这意味着“公司名称”字符串可能类似于 "9Com(panynAm9e00"。我我正在尝试找出解决此问题的最佳方法。(只有 12 个名称完全匹配)

尝试不同的方法后,我最终尝试使用正则表达式匹配每个名称中的 4-5 个或更多字符,具体取决于每个字符串的长度。但我只是在努力寻找最有效的方法来做到这一点。

例如:

第 1 列

 1. 9Com(panynAm9e00  
 2. NikE4  
 3. Mitrosof2 

第 2 列

 1. Microsoft 
 2. Company Name 
 3. Nike 

获取第 1 列 中的第一个元素并在第 2 列 中查找匹配项。如果没有完全匹配,则查找具有 4-5 个相同字符的字符串。

有什么建议吗?

请您参考如下方法:

我建议使用 pandas 和 pd.read_excel() 读取您的 Excel 文件,然后使用 fuzzywuzzy 执行匹配,因为示例:

import pandas as pd 
from fuzzywuzzy import process, fuzz 
 
df = pd.DataFrame([['9Com(panynAm9e00'], 
        ['NikE4'], 
        ['Mitrosof2']], 
        columns=['Name']) 
 
known_list = ['Microsoft','Company Name','Nike'] 
 
def find_match(x): 
 
  match = process.extractOne(x, known_list, scorer=fuzz.partial_token_sort_ratio)[0] 
  return match 
 
df['match found'] = [find_match(row) for row in df['Name']] 

产量:

               Name   match found 
0  9Com(panynAm9e00  Company Name 
1             NikE4          Nike 
2         Mitrosof2     Microsoft