Python 如何使用数据帧中的for循环计算每个唯一值的Levenshtein距离
我试图使用for循环计算数据帧中的Levenshtein距离Python 如何使用数据帧中的for循环计算每个唯一值的Levenshtein距离,python,pandas,levenshtein-distance,Python,Pandas,Levenshtein Distance,我试图使用for循环计算数据帧中的Levenshtein距离 df2_2=df2_1[['Concat','Count','ffour']].copy() for a in df2_2['Concat'].unique(): dw2_2=df2_2[df2_2['Concat']==a] vv = dw2_2.iloc[:, 1::2].values iRow, iCol = np.unravel_index(vv.argmax(), vv.shape) iCol
df2_2=df2_1[['Concat','Count','ffour']].copy()
for a in df2_2['Concat'].unique():
dw2_2=df2_2[df2_2['Concat']==a]
vv = dw2_2.iloc[:, 1::2].values
iRow, iCol = np.unravel_index(vv.argmax(), vv.shape)
iCol = iCol * 2 + 1
result = dw2_2.iloc[iRow, [0, iCol, iCol + 1]]
b=result.copy()
b=b.drop(labels=['Concat','Count'])
print (b)
b=b.astype(str)
for a1 in df2_2['ffour'].unique():
dw2_1=df2_2[df2_2['ffour']==a1]
c= dw2_1['ffour'].copy()
print (c)
c=c.astype(str)
for i in range (len(b)):
distance=lev.distance(b,c)
print (distance)
ratio=lev.ratio(b,c)
print (ratio)
我在这方面有个错误
File "<ipython-input-129-15900bf3d493>", line 17, in <module>
distance=lev.distance(b,c)
TypeError: distance expected two Strings or two Unicodes
文件“”,第17行,在
距离=水平距离(b,c)
TypeError:需要两个字符串或两个Unicode的距离
需要这方面的帮助。我建议您检查
b
和c
的值。
你可以一直使用str(b)
,和str(c)
,这可能会奏效。就像这样:
distance=lev.distance(str(b),str(c))
或者,您可以对列Concat
中的所有值应用str(),以确保只有字符串:
df2_2['Concat'] = df2_2['Concat'].map(lambda x: str(x))
打印(类型(b),b)
;对c
执行相同的操作。print
命令可能是调试和诊断的钝工具,但它非常有效。它工作正常,但计算错误。“ffour”列只有4个字母数字值,因此理想情况下比率应该是0、25、75或100,但我得到的值类似于0.68。我不知道你正在使用的Levenshtein的具体实现。有很多,其中一些有一些变体…您甚至可以在提供的Url中实现您自己的风格。但是0.68是非常相似的,如果不知道具体的字符串是什么,很难判断它是否正确。如果我的回答确实帮助了你原来的问题,如果你能接受它作为答案,我将不胜感激。