当我尝试在我的代码中使用 re.sub 表达式时,为啥会收到一个名为“预期字符串或类似对象的字节”的错误 [重复]

Posted

技术标签:

【中文标题】当我尝试在我的代码中使用 re.sub 表达式时,为啥会收到一个名为“预期字符串或类似对象的字节”的错误 [重复]【英文标题】:Why am I getting an error called 'expected string or bytes like object' when I try to use the re.sub expression in my code [duplicate]当我尝试在我的代码中使用 re.sub 表达式时,为什么会收到一个名为“预期字符串或类似对象的字节”的错误 [重复] 【发布时间】:2020-04-01 07:48:45 【问题描述】:

我有一个 csv 文件,其中有 10 列。我的项目是使用 nlp 将我文件中的评论分类为好或坏。当我使用 re.sub 方法对存储评论的列(评论文本列)进行标记化时,它会给出一个错误,称为“预期的字符串或类似对象的字节”。

我已附上我的 csv 文件以及我在 jupyter 笔记本中尝试过的代码。

这是我的data file。

我的代码现在是这样的,错误在're.sub'行

import numpy as np
import pandas as pd
import nltk
import matplotlib

dataset = pd.read_csv("C:/Users/a/Downloads/data.tsv", delimiter = "\t", quoting = 1)
dataset.head()

import re
import nltk
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
corpus = []
for i in range(0, 1000):
  review = re.sub('[^a-zA-Z]', ' ', dataset['Review Text'][i])
  review = review.lower()
  review = review.split()
  ps = PorterStemmer()
  review = [ps.stem(word) for word in review if not word in 
  set(stopwords.words('english'))]
  review = ' '.join(review)
  corpus.append(review)

如何纠正我的错误?我想做的下一步是矢量化、训练和分类。

【问题讨论】:

问题是你的数据文件中的一些数据被 Pandas 转换为实际的整数和浮点数。那些不是字符串,这会引发你的错误。 【参考方案1】:

问题的根源是内容为空的单元格,而 默认被 read_csv 读取为 NaN,这是一个“特殊情况” 浮动

另一方面,re.sub 需要一个 string 数据(不是 float)。

一种可能的解决方案是将所有 NaN 值替换为 一个空字符串:

df['Review Text'] = df['Review Text'].replace(np.nan, '')

然后调用re.sub

【讨论】:

这有帮助,非常感谢。你能帮我在另一个步骤中使用 sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 42)但它给出了一个错误,说“找到样本数量不一致的输入变量:[1000, 23486]”@Valdi_Bo【参考方案2】:

使用

review = re.sub('[^a-zA-Z]', ' ', str(dataset['Review Text'][i]))

而不是

review = re.sub('[^a-zA-Z]', ' ', dataset['Review Text'][i])

【讨论】:

这有帮助,非常感谢。你能帮我在另一个步骤中使用 sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 42)但它给出了一个错误,提示“找到样本数量不一致的输入变量:[1000, 23486]” 确保 X 和 y 的行数相同。

以上是关于当我尝试在我的代码中使用 re.sub 表达式时,为啥会收到一个名为“预期字符串或类似对象的字节”的错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:如何将 re.sub 与可变数量的元素一起使用?

python 正则表达式 re.sub & re.subn

在 re.sub 中使用变量名 [重复]

如何在 Python 3.9 中从 re.sub 中删除反斜杠

re.sub错误与“预期字符串或字节类对象”

re.sub 替换为匹配的内容