几处更正。
到
df['NEW_PETS'] = fuzz_m(df['PETS'], L, fuzz.ratio)
-
将列表元素设置为字符串。
-
模糊模糊的
extractOne
方法按顺序接受处理器和记分器(
link to source code
.). 您的位置参数
fuzz.ratio
被错误地理解为处理器,而实际上它是一个记分员。改变
process.extractOne(c, pet_list, score_t)
到
process.extractOne(c, pet_list, scorer=score_t)
.
-
此基于循环的代码将无法按预期工作。
fuzz_m
只调用一次,其返回值将广播到序列的所有条目中
df['NEW_PETS']
.
更友好的方式:
L = ['ducks', 'frogs', 'doggies']
def fuzz_m(col, pet_list, score_t):
new_name, score = process.extractOne(col, pet_list, scorer=score_t)
if score<95:
return col
else:
return new_name
df['NEW_PETS'] = df['PETS'].apply(fuzz_m, pet_list=L, score_t=fuzz.ratio)