提出ValueError(" np.nan是无效文档,预期字节或"

时间:2018-03-13 14:54:44

标签: python pandas scikit-learn countvectorizer

我在scikit中使用CountVectorizer学习矢量化特征序列。当它发出如下错误时我卡住了: ValueError:np.nan是无效文档,预期字节或unicode字符串。

我正在举例说明csv数据集有两列CONTENT和sentiment.my代码如下:

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.

3 个答案:

答案 0 :(得分:2)

用空格替换NaN - 这应该让CountVectorizer满意:

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

答案 1 :(得分:0)

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

因此,而不是:

X,y = df.CONTENT,df.sentiment

使用:

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

用空格替换Nans。

答案 2 :(得分:0)

我可以从您的问题中猜测,内容中的某些字段为空。您可以遵循fillna方法或通过df [df [“ Content”]。notnull()]删除列。这将为您提供没有NAN值的数据集。