如何使用 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

