Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取类型错误:';浮动';对象在使用字符串列表时不可编辑_Python_Data Cleaning_Difflib - Fatal编程技术网

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
对于python3
pip3 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