2

我在 scikit-learn 中使用 CountVectorizer 对特征序列进行矢量化。当它给出如下错误时,我被卡住了:ValueError:np.nan 是一个无效的文档,预期的字节或 unicode 字符串。

我正在使用包含两列内容和情感的示例 csv 数据集。我的代码如下:

df = pd.read_csv("train.csv",encoding = "ISO-8859-1")
X, y = df.CONTENT, df.sentiment

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
print X_train, y_train

vect = CountVectorizer(ngram_range=(1,3), analyzer='word', encoding = "ISO-8859-1")
print vect
X=vect.fit_transform(X_train, y_train)
y=vect.fit(X_test) 
print vect.get_feature_names()

我得到的错误是:

File "C:/Users/HP/cntVect.py", line 28, in <module>
    X=vect.fit_transform(X_train, y_train)

  File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\feature_extraction\text.py", line 839, in fit_transform
    self.fixed_vocabulary_)

  File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\feature_extraction\text.py", line 762, in _count_vocab
    for feature in analyze(doc):

  File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\feature_extraction\text.py", line 241, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)

  File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\feature_extraction\text.py", line 121, in decode
    raise ValueError("np.nan is an invalid document, expected byte or "

ValueError: np.nan is an invalid document, expected byte or unicode string.
4

3 回答 3

9

用空格替换 NaN - 这应该CountVectorizer很高兴:

X, y = df.CONTENT.fillna(' '), df.sentiment
于 2018-03-13T14:57:16.710 回答
2

您没有恰当地处理 Nan,即“不是数字”。使用 python 的 fillna() 方法用您想要的合适值填充/替换 pandas 数据框中缺失的或 NaN 值。

因此,而不是:

X, y = df.CONTENT, df.sentiment

采用 :

X, y = df.CONTENT.fillna(' '), df.sentiment

其中Nans被空格替换。

于 2018-09-18T07:50:45.883 回答
2

我可以从您的问题中猜到内容中的某些字段是空的。您可以按照 fillna 方法或通过 df[df["Content"].notnull()] 删除列。这将为您提供没有 NAN 值的数据集。

于 2019-01-31T07:30:06.733 回答