【发布时间】:2020-11-09 23:59:47
【问题描述】:
我有一个包含一列文本的 pandas DataFrame,我想使用 scikit-learn 的 CountVectorizer 对文本进行矢量化。但是,文本包含缺失值,因此我想在矢量化之前估算一个常量值。
我最初的想法是创建一个Pipeline 的SimpleImputer 和CountVectorizer:
import pandas as pd
import numpy as np
df = pd.DataFrame({'text':['abc def', 'abc ghi', np.nan]})
from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy='constant')
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(imp, vect)
pipe.fit_transform(df[['text']]).toarray()
但是,fit_transform 会出错,因为SimpleImputer 输出二维数组,而CountVectorizer 需要一维输入。这是错误消息:
AttributeError: 'numpy.ndarray' object has no attribute 'lower'
问题:如何修改此Pipeline 以使其正常工作?
注意:我知道我可以在 pandas 中估算缺失值。但是,我想在 scikit-learn 中完成所有预处理,以便可以使用 Pipeline 将相同的预处理应用于新数据。
【问题讨论】:
-
为什么不在原始数据框中估算缺失值:
df.fillna("")? -
@DYZ 正如我在问题底部提到的,我想在 scikit-learn 中完成所有预处理,以便我可以使用 Pipeline 对新数据应用相同的预处理。
标签: python machine-learning scikit-learn imputation countvectorizer