2017-12-03 12 views
-1

두 문자열 (listAlistB) 목록간에 가장 가까운 일치를 얻으려고 시도하면 listC이 생성됩니다.TypeError 가져 오는 중 : 문자열 목록을 사용할 때 'float'객체를 반복 할 수 없음

그 목적은 각 문자열이 일부 항목의 철자 오류를 수정해야하는 열을 나타내는 문자열 하나가있는 데이터 프레임을 정리해야하기 때문입니다.

내가 수정하려는 실제 열 테스트라고 :

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 for 루프는 newList을 거쳐 각 요소를 가져 와서 과일 목록에서 가장 가까운 항목을 반환합니다. 그러나 내 코드가 작동 한 직후에 작은 목록을 수정하는 것이 더 쉬울 것이라고 생각하여 newTest 목록을 수정하는 데 사용할 수 있습니다.

그래서 listAlistB을 만들었습니다. 이 테스트 열의 값 중 일부를 listB에 복사하고 목록 과일 값을 사용하여 listA을 만들었습니다.

내가 그렇게 관리 방법이었다 : 나는 그것이 잘 작동하지만 내 newTest리스트와 과일 목록에 동일한 알고리즘을 적용하는 경우가 작동하지 않습니다이 작업을 실행하면

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']] 

, 그것은 말한다 : TypeError: 'float' object is not iterable.

누군가가 그것을 고칠 수있는 방법이나 내가 할 수있는 다른 방법을 알고 있다면 매우 도움이 될 것입니다.

+0

'newTest'의 값은 무엇입니까? – SethMMorton

+0

오, 그게 listB 였어. 나는 그걸 잊어 버렸어. 죄송합니다./ –

+0

[오류 잡기] (https://docs.python.org/3/tutorial/errors.html#handling-exceptions) 및 예외 패키지의 데이터를 검사하십시오. – wwii

답변

0

전체 코드를 보지 않고도 데이터와 함께 사용할 때 newTest가 부동입니다.

또는

라인이 :

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

이 월 :이 기능은 diff는의

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

대신 예를 들어, 문자열이 아닌 float를 잡 될 수 있습니다

listC.append(diff.get_close_matches(i, fruits, n=1, cutoff=0.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' –