提高 ValueError("np.nan is an invalid document, expected byte or "
raise ValueError("np.nan is an invalid document, expected byte or "
我在 scikit-learn 中使用 CountVectorizer()
来向量化特征序列。我收到如下错误:
ValueError: np.nan is an invalid document, expected byte or unicode string.
我正在使用包含两列 CONTENT
和 sentiment
的示例 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.
用空格替换 NaN - 这应该会让 CountVectorizer
高兴:
X, y = df.CONTENT.fillna(' '), df.sentiment
您没有正确处理 NaN
,即“不是数字”。
使用 python 的 fillna()
方法 fill/replace pandas dataframe
中的缺失值或 NaN
值为您想要的值。
因此,而不是:
X, y = df.CONTENT, df.sentiment
使用:
X, y = df.CONTENT.fillna(' '), df.sentiment
其中 NaN
被 <spaces>
替换。
我从你的问题中可以猜到内容中的某些字段是空的。您可以按照 fillna 方法或通过 df[df["Content"].notnull()] 删除列。这将为您提供没有 NAN 值的数据集。
我在 scikit-learn 中使用 CountVectorizer()
来向量化特征序列。我收到如下错误:
ValueError: np.nan is an invalid document, expected byte or unicode string.
我正在使用包含两列 CONTENT
和 sentiment
的示例 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.
用空格替换 NaN - 这应该会让 CountVectorizer
高兴:
X, y = df.CONTENT.fillna(' '), df.sentiment
您没有正确处理 NaN
,即“不是数字”。
使用 python 的 fillna()
方法 fill/replace pandas dataframe
中的缺失值或 NaN
值为您想要的值。
因此,而不是:
X, y = df.CONTENT, df.sentiment
使用:
X, y = df.CONTENT.fillna(' '), df.sentiment
其中 NaN
被 <spaces>
替换。
我从你的问题中可以猜到内容中的某些字段是空的。您可以按照 fillna 方法或通过 df[df["Content"].notnull()] 删除列。这将为您提供没有 NAN 值的数据集。