使用 FuzzyWuzzy 和 Pandas 进行字符串匹配时出现 TypeError
TypeError when using FuzzyWuzzy and Pandas for string matching
我在 Python 中使用 FuzzyWuzzy 库时遇到错误 3. 我正在使用 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 return 来自 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
>>>
老实说,我不确定这里发生了什么。我在互联网上也找不到太多。
如果您能提供任何帮助,我们将不胜感激。
谢谢!
我认为您 运行 遇到这样一种情况,其中一个数据框列中有空值或某些非字符串数据类型。 FuzzyWuzzy 需要一个字符串,当它遇到 NaN
或另一个非字符串时,它会抛出错误。您可以通过用另一列的值填充 NaN 来摆脱它:
df.CorporationName.fillna(df.CorporationName1, inplace = True)
df.CorporationName1.fillna(df.CorporationName, inplace = True)
或转换非字符串:
df.loc[:, 'CorporationName'] = df.CorporationName.astype(str)
我在 Python 中使用 FuzzyWuzzy 库时遇到错误 3. 我正在使用 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 return 来自 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
>>>
老实说,我不确定这里发生了什么。我在互联网上也找不到太多。
如果您能提供任何帮助,我们将不胜感激。
谢谢!
我认为您 运行 遇到这样一种情况,其中一个数据框列中有空值或某些非字符串数据类型。 FuzzyWuzzy 需要一个字符串,当它遇到 NaN
或另一个非字符串时,它会抛出错误。您可以通过用另一列的值填充 NaN 来摆脱它:
df.CorporationName.fillna(df.CorporationName1, inplace = True)
df.CorporationName1.fillna(df.CorporationName, inplace = True)
或转换非字符串:
df.loc[:, 'CorporationName'] = df.CorporationName.astype(str)