当使用Levenshtein包时,我创建了一个函数来计算python中两个变量的Levenshtein距离(L.distance)。但是,当我尝试应用该函数时,出现TypeError(“距离期望为两个字符串或两个Unicode”)。但是,我用来计算L.distance的两个变量都是字符串。
我尝试了一个for循环,然后在看了其他实现L.distance的在线脚本后将其取出。我创建了一个仅使用单个词进行比较的测试数据框,因为我认为这可能是个问题(我正在比较可能有很多词而不只是单数词的公司名称)
lst=['bear', 'tomato', 'green', 'snake']
lst2 =['baear', 'tomato', 'grean', 'snake']
dftest=pd.DataFrame(list(zip(lst,lst2)), columns =['lst1', 'lst2'])
result= []
def distancefinder(string1, string2):
for string1, string2 in something:
stringdist = lv.distance(string1, string2)
result.append(stringdist)
return (result)
dftest['lv_matchscore'] = distancefinder(dftest.lst1, dftest.lst2)
预期输出是两个变量的计算出的L.distance。
答案 0 :(得分:0)
这是您应该这样做的方式:
# Imports
import pandas as pd
import Levenshtein as lv
lst=['bear', 'tomato', 'green', 'snake']
lst2 =['baear', 'tomato', 'grean', 'snake']
dftest=pd.DataFrame(list(zip(lst,lst2)), columns =['lst1', 'lst2'])
result= []
def distancefinder(lst1, lst2):
# Create the list you will populate with the results
results = []
# Loop through your records (Levenshtein uses strings, not pandas.Series)
for i in range(len(lst1)):
# Calculate the distance
stringdist = lv.distance(lst1[i], lst2[i])
# Append the result
results.append(stringdist)
# Return the results list
return results
dftest['lv_matchscore'] = distancefinder(dftest.lst1, dftest.lst2)
编辑
for i in range(len(lst1)):
lst1
是您要比较的熊猫系列(lst2
是另一个)len(lst1)
以整数值返回序列的长度(在此示例中,结果为4)range(len(lst1))
(在这种情况下为range(4)
)返回一个整数列表,从0开始到3的整数。因此:[0,1,2,3] for i in range(len(lst1))
将是for i in [0, 1, 2, 3]
。 i
将用作索引,以从要比较的系列中获取每个元素。在第一个迭代中,您将比较lst1[0]
和lst2[0]
;第二个是lst1[1]
和lst2[1]
,依此类推。