修复一列[Pandas]中的多个拼写错误



我目前正在清理一个数据集,该数据集显示每个人收到的姓名和礼物。

每一行都是这样的:

礼物
姓名
Agustin Dellagiovanna 巧克力
Agustín Delalgiovana 家具
Agustín Dellagiovanna 艺术

查找字符串之间距离的一种方法是使用difflib.SequenceMatcher,如以下代码段所示:

from difflib import SequenceMatcher
unique_names = df['Name'].unique()
threshold = 0.75
candidate_similar_names = []
for i, name1 in enumerate(unique_names[:-1]):
for name2 in unique_names[i+1:]:
similarity = SequenceMatcher(None, name1, name2).ratio()
if similarity > threshold:
candidate_similar_names.append((name1, name2, similarity))
candidate_similar_names

阈值参数越低,名称的距离就越远。

您可以使用fuzzywuzzy包,如Alperen Cetin:所示

import pandas as pd
from fuzzywuzzy import fuzz
df = pd.DataFrame({'Name': ['Agustin Dellagiovanna', 'Agustín Delalgiovanna', 'Agustín Dellagiovanna'],
'Gift': ['Chocolate', 'Furniture', 'Art']})
def func(input_list):
for i in range(len(input_list)):
for j in range(len(input_list)):
if i < j and fuzz.ratio(input_list[i], input_list[j]) >= 90:
input_list[i] = input_list[j]

return input_list
wanted = ['Agustin Dellagiovan']
df['Name'] = func(df['Name'].to_list() + wanted)[: -len(wanted)]

这将把所有类似的项目重命名为相同的项目。如果你创建了你想要的名字列表(所有的名字都是正确的。我不知道你将如何决定(,那么所有的名字应该改为那些(如果它们足够相似的话(。

最新更新