2017-09-06 5 views
1

pandasデータフレームを使用してインポートされたcsvを使用して、ユーザ生成入力と同様のエントリのdfの1つのカラムを検索しようとしています。以前はdifflibを使用していませんし、試行がTypeErrorで終了しました: 'float'型のオブジェクトにlen()または空の[]リストがありません。Python 3.6 Pandas Difflib Get_Close_Matchesユーザ入力でデータフレームをフィルタリングする

import difflib 
import pandas as pd 

df = pd.read_csv("Vendorlist.csv", encoding= "ISO-8859-1") 
word = input ("Enter a vendor: ") 

def find_it(w): 
    w = w.lower() 
    return difflib.get_close_matches(w, df.vendorname, n=50, cutoff=.6) 

alternatives = find_it(word) 
print (alternatives) 

エラー "がreturn.difflib.get_close_matches(df.vendorname、W、N = 50、カットオフ= 0.6)" 同様の結果が "単語" に取得しようと

AMに発生すると思われます'vendorname'と呼ばれる列があります。

お願いします。

答えて

2

あなたのカラムvendornameは間違ったタイプのものです。あなたのreturn文で

試してみてください。

return difflib.get_close_matches(w, df.vendorname.astype(str), n=50, cutoff=.6) 

mport difflib 
import pandas as pd 

df = pd.read_csv("Vendorlist.csv", encoding= "ISO-8859-1") 
word = input ("Enter a vendor: ") 

def find_it(w): 
    w = w.lower() 
    return difflib.get_close_matches(w, df.vendorname.astype(str), n=50, cutoff=.6) 

alternatives = find_it(word) 
print (alternatives) 

質問も空リストの復帰に言及@johnchase

The question also mentions the return of an empty list. The return of get_close_matches is a list of matches, if no item matched within the cutoff an empty list will be returned – johnchase

+2

によってコメントで述べたように。 'get_close_matches'の返り値は一致のリストです。もしカットオフ内で一致する項目がなければ、空のリストが返されます。 – johnchase

+0

" .astype(str) "は私が見つからなかったものです。それは動作します。また、2番目のポイントは私にダブルチェックとすべてのエントリが大文字小文字ではないので、私はコードを "w = w.upper()"に変更しました –

関連する問題