如何使用 Python 对 Pandas DataFrame 列进行模糊匹配?

computer networkinternetmca更新于 2026/2/12 11:22:17

我们将第一个 DataFrame 中的单词与第二个 DataFrame 中的单词进行匹配。对于最接近的匹配,我们将使用阈值。我们将阈值设为 70,即当字符串接近度超过 70% 时即匹配成功。

首先创建字典并将其转换为 Pandas 数据框 −

# 字典
d1 = {'Car': ['BMW', 'Audi', 'Lexus', 'Mercedes', 'Rolls']}

d2 = {'Car': ['BM', 'Audi', 'Le', 'MERCEDES', 'Rolls Royce']}

# 将字典转换为 Pandas 数据框
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)

现在,将 DataFrame 列转换为元素列表,以便进行模糊匹配 −

myList1 = df1['Car'].tolist()
myList2 = df2['Car'].tolist()

示例

以下是完整代码 −

import pandas as pd
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

# 字典
d1 = {'Car': ['BMW', 'Audi', 'Lexus', 'Mercedes', 'Rolls']}

d2 = {'Car': ['BM', 'Audi', 'Le', 'MERCEDES', 'Rolls Royce']}

# 将字典转换为 Pandas 数据框
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)

# 打印 Pandas 数据框
print('Dataframe 1 = 
',df1) print('Dataframe 2 =
',df2) # 用于存储匹配项的空列表稍后 match1 = [] match2 = [] k = [] # 将 DataFrame 列转换为元素列表以进行模糊匹配 myList1 = df1['Car'].tolist() myList2 = df2['Car'].tolist() threshold = 70 # 迭代 myList1 以从 myList2 中提取最接近的匹配项 for i in myList1:    match1.append(process.extractOne(i, myList2, scorer=fuzz.ratio)) df1['matches'] = match1 for j in df1['matches']:    if j[1] >= threshold:       k.append(j[0])    match2.append(",".join(k))    k = [] # 将匹配结果保存到 df1 df1['matches'] = match2 print("
Matches...") print(df1)

输出

这将产生以下输出 −

Dataframe 1 =
       Car
0      BMW
1     Audi
2    Lexus
3 Mercedes
4    Rolls
Dataframe 2 =
           Car
0          BM
1        Audi
2          Le
3    Mercedes
4 Rolls Royce

Matches...
        Car matches
0       BM       BM
1     Audi     Audi
2    Lexus
3 Mercedes MERCEDES
4    Rolls

相关文章