计算DataFrame两列字符串的Levenshtein距离报错求助
解决Levenshtein距离计算中的TypeError问题
问题场景
需计算含约4000行数据的DataFrame中,"Source1"与"Source2"列字符串的Levenshtein距离,原代码运行触发如下错误:
TypeError: 'module' object is not callable
原代码片段:
#import packages import pandas as pd import pyodbc import Levenshtein as lev import numpy as np #Read excel file df = pd.read_excel(xxx) df.head(10) #define arrays a = df.Source1.to_numpy() b = df.Source2.to_numpy() #calculate Levenshtein distance between two arrays for i,k in zip(a, b): print(lev(i, k))
错误原因
直接调用了Levenshtein模块对象(lev(i,k)),但该模块本身不可直接调用,必须使用模块提供的distance方法执行距离计算。
修正方案
将lev(i, k)替换为lev.distance(i, k)。针对4000行数据,推荐用pandas的apply方法替代手动循环,代码更简洁高效:
修正后的代码
#import packages import pandas as pd import Levenshtein as lev #Read excel file df = pd.read_excel(xxx) # 计算Levenshtein距离并生成新列 df['levenshtein_distance'] = df.apply(lambda row: lev.distance(row['Source1'], row['Source2']), axis=1) # 查看结果 print(df[['Source1', 'Source2', 'levenshtein_distance']].head(10))
说明
apply方法可直接对DataFrame每行操作,避免手动循环的冗余代码,性能更适配批量数据- 新增的
levenshtein_distance列会存储每行两列字符串的距离结果,便于后续分析
内容的提问来源于stack exchange,提问作者Pauli du Plooy
相关产品推荐
相关产品推荐

