使用使用pandas数据框导入的csv,我试图在df的一列中搜索类似于用户生成的输入的条目。之前从未使用过difflib,我的尝试在TypeError中结束:对象类型为' float'没有len()或空[]列表。
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(w,df.vendorname,n = 50,cutoff = .6)"
我试图得到类似的结果" word"有一个名为' vendorname'。
的专栏非常感谢帮助。
答案 0 :(得分:2)
您的列vendorname
的类型不正确。
尝试返回声明:
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的评论所述
这个问题还提到了一个空列表的返回。 get_close_matches的返回是一个匹配列表,如果在cutoff中没有匹配项,则返回一个空列表 - johnchase
答案 1 :(得分:-1)
我跳过了:
astype(str)in (return difflib.get_close_matches(w, df.vendorname.astype(str), n=50, cutoff=.6))
改为使用:
dtype='string' in (df = pd.read_csv("Vendorlist.csv", encoding= "ISO-8859-1"))