如何解决类型错误:使用模糊匹配的 Pandas 上的预期字符串或类似字节的对象
背景
import pandas as pd
import nltk
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
df= pd.DataFrame({'ID': [1,2,3],'Text':['This num dogs and cats is (111)888-8780 and other','dont block cow 23 here','cat two num: dog and cows here']
})
我也有一个清单
word_list = ['dog','cat','cow']
和一个函数,该函数应该对 df 的 Text
列与 word_list
def fuzzy(row,word_list):
tweet = row[0]
fuzzy_match = []
for word in word_list:
token_words = nltk.word_tokenize(tweet)
for token in range(0,len(token_words) - 1):
fuzzy_fx = process.extract(word_list[word],token_words[token],limit=100,scorer = fuzz.ratio)
fuzzy_match.append(fuzzy_fx[0])
return pd.Series([fuzzy_match],index = ['Fuzzy_Match'])
然后我加入
df_fuzz = df.join(df.apply(lambda x: fuzzy(x,word_list),axis = 1))
TypeError: expected string or bytes-like object
期望输出
我想要的输出是一个 1) 新列 Fuzzy_Match
,带有 fuzzy
函数的输出
ID Text Fuzzy_Match
0 1 This num dogs and cats is (111)888-8780 and other output of fuzzy 1
1 2 dont block cow 23 here output of fuzzy 2
2 3 cat two num: dog and cows here output of fuzzy 3
解决方法
这应该有效:
In [32]: def fuzzy(row,word_list):
...: tweet = row[1]
...: fuzzy_match = []
...: token_words = nltk.word_tokenize(tweet)
...: for word in word_list:
...:
...: fuzzy_fx = process.extract(word,token_words,limit=100,scorer = fuzz.ratio)
...: fuzzy_match.append(fuzzy_fx[0])
...:
...: return pd.Series([fuzzy_match],index = ['Fuzzy_Match'])
df_fuzz = df.join(df.apply(lambda x: fuzzy(x,word_list),axis = 1))
process.extract()
需要一个列表作为第二个参数。你可以在这里读更多关于它的内容。
python fuzzywuzzy's process.extract(): how does it work?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。