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

1 python pandas fuzzywuzzy

我有一个excel文件,在一列中包含1000多个公司名称,在另一列中包含大约20,000个公司名称.

目标是尽可能多地匹配名称.问题是第一列(1000+)中的名称格式不正确,这意味着"公司名称"字符串看起来像"9Com(panynAm9e00").我正试图找出解决此问题的最佳方法.(仅12个名字完全匹配)

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

例如:

第1栏

 1. 9Com(panynAm9e00 
 2. NikE4 
 3. Mitrosof2
Run Code Online (Sandbox Code Playgroud)

第2栏

 1. Microsoft
 2. Company Name
 3. Nike
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?

rah*_*f23 6

我建议用pandas和读取你的Excel文件pd.read_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']]
Run Code Online (Sandbox Code Playgroud)

产量:

               Name   match found
0  9Com(panynAm9e00  Company Name
1             NikE4          Nike
2         Mitrosof2     Microsoft
Run Code Online (Sandbox Code Playgroud)