Python 数据帧与sci kit fit_transform()函数不兼容

Python 数据帧与sci kit fit_transform()函数不兼容,python,pandas,csv,scikit-learn,Python,Pandas,Csv,Scikit Learn,因此,我创建了一个分类器,用于区分欺诈消息和真实消息。代码片段如下所示: # Import training set as DataFrame from CSV dataset = pd.read_csv('data.csv', sep=',') class_names = { 1: 'no-flag', 2: 'flag' } # Separate training data to message, class pairs X_train, y_train = dataset.iloc[:,

因此,我创建了一个分类器,用于区分欺诈消息和真实消息。代码片段如下所示:

# Import training set as DataFrame from CSV
dataset = pd.read_csv('data.csv', sep=',')
class_names = { 1: 'no-flag', 2: 'flag' }

# Separate training data to message, class pairs
X_train, y_train = dataset.iloc[:,0], dataset.iloc[:, 1]

messages = pd.read_csv('messages.csv', header=None)
X_predict = messages.iloc[:,0]

print "TRAIN:\n"
print type(X_train)
print "PREDICT:\n"
print type(X_predict)

# Vectorise text data
vect = TfidfVectorizer(ngram_range=(1, 2), lowercase=True, preprocessor=sanitise_message)
X_train_tfidf = vect.fit_transform(X_train)
X_predict_tfidf = vect.transform(X_predict)
Traceback (most recent call last):
File "post-test.py", line 3, in <module>
classify()
File "/Users/user/Documents/MyTutor/mi_datawarehouse/classifier.py", line 90, in classify
X_predict_tfidf = vect.transform(X_predict)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 1409, in transform
X = super(TfidfVectorizer, self).transform(raw_documents)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 923, in transform
_, X = self._count_vocab(raw_documents, fixed_vocab=True)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 792, in _count_vocab
for feature in analyze(doc):
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 266, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 119, 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.
我曾经在培训集中使用十倍交叉验证运行此功能,使用:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)
这过去很管用。现在我想使用整个训练集作为训练数据,并预测未分类的数据。但是,调用
X\u predict\u tfidf=vect.transform(X\u predict)
会抛出一个错误,如下所示:

# Import training set as DataFrame from CSV
dataset = pd.read_csv('data.csv', sep=',')
class_names = { 1: 'no-flag', 2: 'flag' }

# Separate training data to message, class pairs
X_train, y_train = dataset.iloc[:,0], dataset.iloc[:, 1]

messages = pd.read_csv('messages.csv', header=None)
X_predict = messages.iloc[:,0]

print "TRAIN:\n"
print type(X_train)
print "PREDICT:\n"
print type(X_predict)

# Vectorise text data
vect = TfidfVectorizer(ngram_range=(1, 2), lowercase=True, preprocessor=sanitise_message)
X_train_tfidf = vect.fit_transform(X_train)
X_predict_tfidf = vect.transform(X_predict)
Traceback (most recent call last):
File "post-test.py", line 3, in <module>
classify()
File "/Users/user/Documents/MyTutor/mi_datawarehouse/classifier.py", line 90, in classify
X_predict_tfidf = vect.transform(X_predict)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 1409, in transform
X = super(TfidfVectorizer, self).transform(raw_documents)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 923, in transform
_, X = self._count_vocab(raw_documents, fixed_vocab=True)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 792, in _count_vocab
for feature in analyze(doc):
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 266, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)
File "/Users/user/miniconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 119, 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.
回溯(最近一次呼叫最后一次):
文件“post test.py”,第3行,在
分类()
文件“/Users/user/Documents/MyTutor/mi_datawarehouse/classifier.py”,第90行,在分类中
X\u predict\u tfidf=vect.transform(X\u predict)
文件“/Users/user/miniconda2/lib/python2.7/site packages/sklearn/feature_extraction/text.py”,第1409行,在转换中
X=super(TfidfVectorizer,self).transform(原始文档)
文件“/Users/user/miniconda2/lib/python2.7/site packages/sklearn/feature_extraction/text.py”,第923行,在转换中
_,X=self.\u count\u vocab(原始文档,固定的\u vocab=True)
文件“/Users/user/miniconda2/lib/python2.7/site packages/sklearn/feature\u extraction/text.py”,第792行,在
对于分析中的功能(文档):
文件“/Users/user/miniconda2/lib/python2.7/site packages/sklearn/feature_extraction/text.py”,第266行,在
标记化(预处理(自解码(doc))、停止字)
文件“/Users/user/miniconda2/lib/python2.7/site packages/sklearn/feature_extraction/text.py”,第119行,在decode中
raise VALUERROR(“np.nan是无效文档,应为字节或”
ValueError:np.nan是无效文档,应为字节或unicode字符串。
有趣的是,X_列车和X_预测的类型是相同的:

TRAIN:
<class 'pandas.core.series.Series'>
PREDICT:
<class 'pandas.core.series.Series'>
列车:
预测:
我做错了什么?我已经看遍了所有地方,包括
scikit学习
docs,对此我都发疯了


注意:这不是的副本,我在这个问题上尝试了所有方法,但没有任何效果。数据结构和问题略有不同。

快速修复可能是删除NaN。尝试
消息。dropna()

快速修复可能是删除NaN。尝试
消息。dropna()
尝试
X\u tprodict.to\u matrix()
可能是@desertnaut的复制品我尝试了另一篇文章中的所有建议,但都无效。略有不同problem@lwileczek你是说X_predict?就是那个error@CesarF好的,在这种情况下,在您的问题中明确指出这一点很有用,以避免被标记为重复(我建议您现在就这样做)尝试
X\u t对矩阵()的命令
可能是@desertnaut的复制品我尝试了另一篇文章中的所有建议,但都无效。略有不同problem@lwileczek你是说X_predict?就是那个error@CesarF好的,在这种情况下,在您的问题中明确指出这一点很有用,以避免被标记为重复(我建议您现在就这样做)图例!这立即解决了问题!标记为正确答案。图例!这立即解决了问题!标记为正确答案。