sklearn用ColumnTransformer多列不同预处理报1D数据错误如何解决
错误原因
StandardScaler、OneHotEncoder这类预处理器要求输入为二维数组结构,当你给ColumnTransformer的列选择器传单个字符串(比如'count')时,ColumnTransformer会把对应列以一维Series的形式传给预处理器,不符合输入要求;而TfidfVectorizer本身适配一维文本序列输入,所以之前单独处理text列时不会报错。
解决方法
把需要传给StandardScaler、OneHotEncoder的列名从单个字符串改为包裹在列表里的形式,哪怕只有一列也要用列表包裹,保证传入的是二维结构。
修改后的代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.compose import ColumnTransformer from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import OneHotEncoder transformer = ColumnTransformer([ ('vectorizer', TfidfVectorizer(ngram_range=(1, 1)), 'text'), ('scaler', StandardScaler(), ['count']), # 单元素列表包裹列名,传入二维结构 ('enc', OneHotEncoder(), ['daytime']) # 同理用列表包裹 ], remainder='passthrough') X_transformed = transformer.fit_transform(X)
内容的提问来源于stack exchange,提问作者Nankatsu
相关产品推荐
相关产品推荐

