2016-04-15 7 views
0

Python 3でFuzzyWuzzyライブラリを使用しているときにエラーが発生しました.Pandasライブラリを使用してCSVファイルを処理しています。FuzzyWuzzyとPandasを文字列照合に使用した場合のTypeError

私はCSVファイルに次のデータがあります。CorporationNameとCorporationName2列

> 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のすべての文字列と比較することです。 FuzzyWuzzyがCorporationName2から5つの最も関連性の高い文字列(つまり、その名前の可能なバリエーション)を返すことを希望します。これは私が自分自身に課した大規模な文字列照合タスクの最初のステップに過ぎません。

> 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

あなたは、データフレーム列の1つにヌル値または一部の非文字列データ型がある状況に遭遇していると思います。 FuzzyWuzzyは文字列を受け取り、NaNまたは別の文字列以外の文字列を検出すると、エラーをスローします。あなたがNaNの他の列の値で充填することによって、このを取り除くことができます:

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

または非文字列を変換する:

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

こんにちは@Sam、妙にそれはまだ同じエラーを返しています。どうやらそれは別のものです。 – Steven

+0

@Stevenあなたのdfに他のデータ型を持たせることができますか? – Sam

+0

そうだった。ありがとう! – Steven

関連する問題