0

Python 3 で FuzzyWuzzy ライブラリを使用しているときにエラーが発生します。Pandas ライブラリも使用して CSV ファイルを操作しています。

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 列は実際には同じです。それぞれ不動産関連の事業者名が入っています。これらのビジネスの名前は、各列に複数回表示されますが、ご覧のとおり、わずかに異なる形で表示される場合があります。

私の目標は、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
>>> 

正直に言うと、ここで何が起こっているのかわかりません。インターネットでもあまり見つけられませんでした。

あなたが提供できるどんな助けも大歓迎です。

ありがとう!

4

1 に答える 1

1

データフレーム列の 1 つに null 値または文字列以外のデータ型がある状況に遭遇していると思います。FuzzyWuzzy は文字列を想定しており、文字列NaN以外の文字列または別の文字列に遭遇すると、エラーをスローします。NaN に他の列の値を入力することで、これを取り除くことができます。

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

または非文字列の変換:

df.loc[:, 'CorporationName'] = df.CorporationName.astype(str)
于 2016-04-15T21:35:54.127 に答える