我找到了解决此问题的更有效方法。
x = v.fit_transform(df['Review'].apply(lambda x: np.str_(x)))
当然,您可以使用df['Review'].values.astype('U')
来转换整个系列。但是我发现如果您要转换的Series很大,使用此功能将消耗更多的内存。 (我用80w行数据的Series进行了测试,这样做astype('U')
将消耗约96GB的内存)
相反,如果您使用lambda表达式仅将Series中的数据从str
转换为numpy.str_
, fit_transform
函数也将接受结果,这将更快并且不会增加内存使用量。
我不确定为什么会这样,因为在TFIDF Vectorizer的“文档”页面中:
fit_transform(raw_documents,y = None)
参数:raw_documents:可迭代
产生str,unicode或文件对象的可迭代对象
但是实际上,此可迭代项必须产生np.str_
而不是str
。
0
我正在使用scikit-learn的TfidfVectorizer从文本数据中提取一些特征。我有一个带分数(可以为+1或-1)和评论(文本)的CSV文件。我将此数据提取到一个DataFrame中,以便可以运行Vectorizer。
这是我的代码:
这是我得到的错误的回溯:
我检查了CSV文件和DataFrame中是否有被读取为NaN的内容,但找不到任何内容。有18000行,没有一行将
isnan
返回True。df['Review'].head()
如下所示: