Python 3.6 Pandas Difflib Get_Close_Matches使用用户输入过滤数据帧

时间:2017-09-06 19:41:16

标签: pandas match python-3.6 difflib

使用使用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'。

的专栏

非常感谢帮助。

2 个答案:

答案 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"))