【发布时间】:2018-08-20 18:01:57
【问题描述】:
我正在尝试类似 here 所示的操作。 我首先从包含 2405 行格式的 CSV 文件中读取两列:年份,例如“1995”和清洁,例如["this", "is, "exemplar", "document", "contents"],两列都使用字符串作为数据类型。
df = pandas.read_csv("ukgovClean.csv", encoding='utf-8', usecols=[0,2])
我已经对数据进行了预清理,下面是前4行的格式:
[IN] df.head()
[OUT] Year cleaned
0 1909 acquaint hous receiv follow letter clerk crown...
1 1909 ask secretari state war whether issu statement...
2 1909 i beg present petit sign upward motor car driv...
3 1909 i desir ask secretari state war second lieuten...
4 1909 ask secretari state war whether would introduc...
[IN] df['cleaned'].head()
[OUT] 0 acquaint hous receiv follow letter clerk crown...
1 ask secretari state war whether issu statement...
2 i beg present petit sign upward motor car driv...
3 i desir ask secretari state war second lieuten...
4 ask secretari state war whether would introduc...
Name: cleaned, dtype: object
然后我初始化 TfidfVectorizer:
[IN] v = TfidfVectorizer(decode_error='replace', encoding='utf-8')
在此之后,调用下面的行会导致:
[IN] x = v.fit_transform(df['cleaned'])
[OUT] ValueError: np.nan is an invalid document, expected byte or unicode string.
我使用上述thread 中的解决方案克服了这个问题:
[IN] x = v.fit_transform(df['cleaned'].values.astype('U'))
但是,这导致了内存错误 (Full Traceback)。
我尝试使用 Pickle 查找存储以规避大容量内存使用,但我不确定如何在这种情况下过滤它。任何提示将不胜感激,感谢您的阅读。
[更新]
@pittsburgh137 发布了一个类似问题的解决方案,涉及拟合数据here,其中训练数据是使用pandas.get_dummies() 生成的。我所做的是:
[IN] train_X = pandas.get_dummies(df['cleaned'])
[IN] train_X.shape
[OUT] (2405, 2380)
[IN] x = v.fit_transform(train_X)
[IN] type(x)
[OUT] scipy.sparse.csr.csr_matrix
我想我应该更新所有读者,同时看到我可以用这个开发做什么。如果这种方法有任何可预测的缺陷,我很想听听。
【问题讨论】:
标签: python pandas csv scikit-learn tf-idf