Python 如何使用数据帧中的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

我试图使用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 = 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是非常相似的,如果不知道具体的字符串是什么,很难判断它是否正确。如果我的回答确实帮助了你原来的问题,如果你能接受它作为答案,我将不胜感激。