2016-04-15 1 views
0

Я получаю сообщение об ошибке при использовании библиотеки FuzzyWuzzy в Python 3. Я работаю с файлами CSV, также используя библиотеку Pandas.TypeError при использовании FuzzyWuzzy и Pandas для сопоставления строк

У меня есть следующие данные в моем файле CSV:

> BBL   CorporationName    CorporationName2 
    1   123 Elm St LLC    123 Elm St LLC  
    2   ABC Realty, INC    ABC Realty, INC  
    3   123 Elm Street, LLC   123 Elm Street, LLC 
    4   ABC Realty Incorporated  ABC Realty Incorporated   

Столбцы CorporationName и CorporationName2 фактически то же самое. Каждый из них содержит названия предприятий, связанных с недвижимостью. Эти имена этих предприятий появляются несколько раз в каждом столбце, но, как вы можете видеть, они иногда появляются в несколько разных проявлениях.

Моя цель - взять каждую строку в имени корпорации и сравнить ее со всеми строками в корпорацииName2. Я бы хотел, чтобы FuzzyWuzzy вернул 5 наиболее важных строк из КорпорацииName2 (т. Е. Возможные варианты этого имени). Это только первый шаг в массивной задаче сопоставления строк, которой я подвергся.

> import pandas as pd 
    from fuzzywuzzy import process 
    from fuzzywuzzy import fuzz 
    import csv 

    df = pd.read_csv('yescorp_fuzz.csv') 
    test_list = df.CorporationName 
    test_list1 = df.CorporationName1 


    def ownermatch(): 
    for i in test_list: 
    result = process.extract(i,test_list1, limit=5) 
    print(result) 


    ownermatch() 

Это ошибка отслеживающий:

Traceback (most recent call last): 
    File "C:/Python34/YesCorpFuzzy4_15.py", line 17, in <module> 
    ownermatch() 
    File "C:/Python34/YesCorpFuzzy4_15.py", line 13, in ownermatch 
    result = process.extract(i,test_list1, limit=5) 
    File "C:\Python34\lib\site-packages\fuzzywuzzy\process.py", line 103, in extract 
    processed = processor(choice) 
    File "C:\Python34\lib\site-packages\fuzzywuzzy\utils.py", line 84, in full_process 
    string_out = StringProcessor.replace_non_letters_non_numbers_with_whitespace(s) 
    File "C:\Python34\lib\site-packages\fuzzywuzzy\string_processing.py", line 25, in replace_non_letters_non_numbers_with_whitespace 
    return cls.regex.sub(u" ", a_string) 
TypeError: expected string or buffer 
>>> 

Чтобы быть абсолютно честным, я не уверен, что здесь происходит. Я тоже не мог найти в Интернете.

Любая помощь, которую вы могли бы предоставить, была бы весьма признательна.

Спасибо!

ответ

1

Я думаю, что вы столкнулись с ситуацией, когда у вас есть нулевое значение или некоторый нестроковый тип данных в одном из столбцов dataframe. FuzzyWuzzy ожидает строку, и когда она встречает NaN или другую не-строку, она выдает ошибку. Вы можете избавиться от этого, заполнив Нэн со значением другого столбца:

df.CorporationName.fillna(df.CorporationName1, inplace = True) 
df.CorporationName1.fillna(df.CorporationName, inplace = True) 

или преобразования не-строки:

df.loc[:, 'CorporationName'] = df.CorporationName.astype(str) 
+0

Привет @ Сэм, как ни странно это все еще возвращаются ту же ошибку. Видимо, это нечто другое. – Steven

+0

@Steven вы могли бы иметь другие типы данных в вашем df? – Sam

+0

, который, казалось, был этим. Благодаря! – Steven

Смежные вопросы