2017-12-03 8 views
-1

2つの文字列リスト(listAlistB)の間で最も近い一致を得るためにlistCを作成しています。TypeErrorを取得する: 'float'オブジェクトは、文字列のリストを使用するときに反復不可能です

その目的は、各文字列がいくつかのエントリにスペルミスを修正する必要のある果物を表す1列の文字列を持つデータフレームをクリーンアップする必要があるためです。

私は修正したい実際の列には、テストと呼ばれる:

print(test) 

出力:私はnewTestと呼ばれるリストにテスト列を変換し、私はリストを作成した後

0    lychee 
1   strawberry 
2   nectarine 
3    lychee 
4    lychee 
5    banana 
6   raspberry 
7   loga!!n 
.... 
37497   grape 
37498   apple 
37499  rockmelon 
Name: fruit_ate, Length: 37500, dtype: object 

正しい名前の果物:

newTest = list(test) 

fruits = ['lychee', 
     'strawberry', 
     'nectarine', 
     'banana', 
     'raspberry', 
     'kiwi', 
     'apple', 
     'durian', 
     'pear', 
     'logan', 
     'jackfruit', 
     'grape', 
     'peach', 
     'watermelon', 
     'rockmelon', 
     'orange'] 

私は作成しますd aのループはnewListを通り、各要素を取得して、私にフルーツリストの最も近い一致を返します。しかし、最初に小さなリストを修正しようとするほうが簡単だと思ったので、私のコードが動作した直後より、newTestのリストを修正するのに使うことができました。

私はこれらを作成しましたlistAlistBです。 これらの値の一部を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' object is not iterable

誰かがそれを修正する方法やこれを行うことができる別の方法を知っていると、非常に役に立ちます。

+0

'newTest'の値は何ですか? – SethMMorton

+0

ああ、それはリストBであるはずだった、私はそれを忘れてしまった。申し訳ありません:/ –

+0

[エラーをキャッチ](https://docs.python.org/3/tutorial/errors.html#handling-exceptions)、例外スイートのデータを確認してください。 – wwii

答えて

0

コード全体を見ることなく、あなたのデータでそれを使用しているときにnewTestが浮動小数点型であると思いますか?

または回線こと:

diff.get_close_matches('32', text, n=1, cutoff=.5) 

この月:

listC.append(diff.get_close_matches(i, fruits, n=1, cutoff=0.5)) 

が関数diffは、例えば

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) 

実際のテストの関連する部分を掲載すると、診断に役立ちます。

+0

私は何をしようとしているかを明確にするために詳細を追加しました。カットオフの議論は、マッチがどれくらい近く必要かということなので、私はこれが問題だとは思わない。私はそれをチェックして、同じエラーを出したので特に:/ –

0

依存

pip install editdistance 

コード(最も近いです。py)

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 
+0

これが助けてくれることを願う –

+0

私はeditdistanceをインストールしてこのチャンクを実行しようとしましたが、うまくいきませんでした。それは言う:ModuleNotFoundError: 'editdistance'というモジュールはありません –

+0

python2.x 'pip install editdistance' for python3 ' pip3 install editdistance' –

関連する問題