Python 获取类型错误:';浮动';对象在使用字符串列表时不可编辑
我试图在两个字符串列表(Python 获取类型错误:';浮动';对象在使用字符串列表时不可编辑,python,data-cleaning,difflib,Python,Data Cleaning,Difflib,我试图在两个字符串列表(listA和listB)之间获得最接近的匹配,以创建一个listC 这样做的目的是因为我必须清理一个数据框,它有一列字符串,每个字符串代表一个水果,其中一些条目有拼写错误,我需要修复 我要修复的实际列称为test: print(test) 输出: 然后,我将test列转换为一个名为newTest的列表,并创建了一个水果列表,其名称正确: newTest = list(test) fruits = ['lychee', 'strawberry',
listA
和listB
)之间获得最接近的匹配,以创建一个listC
这样做的目的是因为我必须清理一个数据框,它有一列字符串,每个字符串代表一个水果,其中一些条目有拼写错误,我需要修复
我要修复的实际列称为test:
print(test)
输出:
然后,我将test列转换为一个名为newTest
的列表,并创建了一个水果列表,其名称正确:
newTest = list(test)
fruits = ['lychee',
'strawberry',
'nectarine',
'banana',
'raspberry',
'kiwi',
'apple',
'durian',
'pear',
'logan',
'jackfruit',
'grape',
'peach',
'watermelon',
'rockmelon',
'orange']
我创建了一个for循环,它通过newList
获取每个元素,并返回列表中最接近的匹配项。然而,由于我认为首先修复一个小列表要比在我的代码工作之后修复更容易,所以我可以使用它来修复newTest
列表
所以我创建了这些listA
和listB
。
我将test列的一些值复制到listB
,并使用列表的值创建了listA
我做到这一点的方法是:
listA = ['apple', 'banana', 'coco', 'grape', 'pear']
listB = ['ba88tana', 'peeaar', 'apple', 'ggra))pe']
listC = []
for i in listB:
listC.append(diff.get_close_matches(i, fruits, n=1, cutoff=0.5))
output: [['banana'], ['pear'], ['apple'], ['grape']]
当我运行它时,它工作正常,但是如果我对我的newTest
列表和水果列表应用相同的算法,它就不工作了,它说:TypeError:“float”对象是不可编辑的
如果有人知道如何修复它,或者我可以用另一种方法来修复它,这将非常有帮助。如果没有看到完整的代码,我猜当您将newTest用于数据时,它是一个浮点
或者,该行:
listC.append(diff.get_close_matches(i, fruits, n=1, cutoff=0.5))
例如,函数diff可能接收浮点而不是字符串
diff.get_close_matches(32, text, n=1, cutoff=.5)
而不是:
diff.get_close_matches('32', text, n=1, cutoff=.5)
如果数据是浮点数而不是字符串,则可能会出现这种情况
for i in newTest:
diff.get_close_matches(str(i), text, n=1, cutoff=.5)
公布实际测试的相关部分将有助于诊断。
代码(最近的.py)
导入编辑距离
listA=[“苹果”、“香蕉”、“可可”、“葡萄”、“梨”]
listB=['ba88tana','peeaar','apple','ggra])pe']
listC=[]
对于列表B中的i:
res=无
距离=透镜(i)+1
对于listA中的j:
diff=编辑距离。评估(i,j)
如果差异<距离:
距离=差异
res=j
listC.append(res)
打印列表
新测试的值是多少?哦,它应该是listB,我忘了更改它了。抱歉:/并检查except套件中的数据。希望此帮助我已尝试安装editdistance并运行此区块,但无法正常工作。它说:ModuleNotFoundError:没有名为'editdistance'python2.x的模块pip install editdistance
对于python3pip3 install editdistance
我添加了更多详细信息以澄清我正在尝试做的事情。截止参数是比赛需要有多接近,所以我认为这不是问题所在。特别是因为我把它拿去检查,它给了我同样的错误:/
for i in newTest:
diff.get_close_matches(str(i), text, n=1, cutoff=.5)
pip install editdistance
import editdistance
listA = ['apple', 'banana', 'coco', 'grape', 'pear']
listB = ['ba88tana', 'peeaar', 'apple', 'ggra))pe']
listC = []
for i in listB:
res = None
distance = len(i)+1
for j in listA:
diff = editdistance.eval(i, j)
if diff < distance:
distance = diff
res = j
listC.append(res)
print listC