预期的字符串或字节,如对象错误

时间:2018-12-08 17:29:20

标签: python pandas nltk data-analysis

 from nltk import word_tokenize, sent_tokenize
 text = data.loc[:, "text"]
 tokenizer = word_tokenize((text))
 print(tokenizer)

我正在尝试对数据集上的特定列执行单词标记符处理,并且我已经将该列切成薄片并将其传递给word_tokenizer对象,但是当我尝试打印单词时,我得到了“期望的字符串或字节像对象错误”。

1 个答案:

答案 0 :(得分:1)

让我们假设这个dataframe

data = pd.DataFrame({'text':['some thing', 'word', 'some more text']})

然后,当您运行脚本时,您应该会收到错误消息,因为您传递的是序列而不是字符串...

text = data.loc[:, "text"]
tokenizer = word_tokenize(text)
print(tokenizer)
  

TypeError:预期的字符串或类似字节的对象

word_tokenize将接受字符串,这就是word_tokenize('some text')起作用的原因。因此您需要遍历系列:

text = data.loc[:, "text"]
tokenizer = [word_tokenize(text[i]) for i in range(len(text))]
print(tokenizer)

[['some', 'thing'], ['word'], ['some', 'more', 'text']]

如果仍然遇到类型错误,则很可能不是data['text']中的每个值都是字符串。现在假设此数据框:

data = pd.DataFrame({'text':['some thing', 'word', 'some more text', 1]})

在此数据框上执行列表理解将不起作用,因为您尝试在int中传递word_tokenize

但是,如果将所有内容都更改为字符串,则它应该可以工作:

data = pd.DataFrame({'text':['some thing', 'word', 'some more text', 1]})
data['text'] = data['text'].astype(str)

text = data.loc[:, "text"]
tokenizer = [word_tokenize(text[i]) for i in range(len(text))]
print(tokenizer)

[['some', 'thing'], ['word'], ['some', 'more', 'text'], ['1']]

您通过print([type(text[i]) for i in range(len(text))])

检查类型