当我尝试在我的代码中使用 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 与可变数量的元素一起使用?