我能够复制Github回购中给出的示例。但是,当我在自己的数据上尝试时,我得到了ValueError。
下面是一个伪数据,它提供与我的真实数据相同的错误。
import pandas as pd
import numpy as np
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import LabelEncoder, StandardScaler, MinMaxScaler
data = pd.DataFrame({'pet':['cat', 'dog', 'dog', 'fish', 'cat', 'dog','cat','fish'], 'children': [4., 6, 3, 3, 2, 3, 5, 4], 'salary': [90, 24, 44, 27, 32, 59, 36, 27], 'feat4': ['linear', 'circle', 'linear', 'linear', 'linear', 'circle', 'circle', 'linear']})
mapper = DataFrameMapper([
(['pet', 'feat4'], LabelEncoder()),
(['children', 'salary'], [StandardScaler(),
MinMaxScaler()])
])
np.round(mapper.fit_transform(data.copy()),2)
以下是错误
ValueError Traceback(最近一次调用最后一次) in() ----> 1 np.round(mapper.fit_transform(data.copy()),2)
C:\ Users \ E245713 \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ sklearn \ base.py in fit_transform(self,X,y,** fit_params) 如果y为None,则为453: 454#fit方法1(无监督转换) - > 455 return self.fit(X,** fit_params).transform(X) 456其他: 457#fit方法2(监督转换)
C:\ Users \ E245713 \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ sklearn_pandas \ dataframe_mapper.py in fit(self,X,y) 95为列,变换器在self.features: 96如果变压器不是非: ---> 97 transformers.fit(self._get_col_subset(X,columns)) 98回归自我 99
C:\ Users \ E245713 \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ sklearn \ preprocessing \ label.py in fit(self,y) 106 self:返回一个self的实例。 107“”“ - > 108 y = column_or_1d(y,warn = True) 109 _check_numpy_unicode_bug(y) 110 self.classes_ = np.unique(y)
C:\ Users \ E245713 \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py in column_or_1d(y,warn) 549返回np.ravel(y) 550 - > 551引发ValueError(“输入形状错误{0}”。格式(形状)) 552 553
ValueError:错误的输入形状(8,2)
有人可以帮忙吗?
感谢
答案 0 :(得分:5)
如果确实需要多个输入(例如文档中的sklearn.decomposition.PCA(1)),则只应向变换提交多个数组。在您的情况下,错误最终来自这一行:
(['pet', 'feat4'], LabelEncoder()),
即使这不起作用:
(['pet', 'feat4'], [LabelEncoder(), LabelEncoder()]),
你必须做这样的事情:
mapper_good = DataFrameMapper([
(['pet'], LabelEncoder()),
(['feat4'], LabelEncoder()),
(['children'], StandardScaler()),
(['salary'], MinMaxScaler())
])
np.round(mapper_good.fit_transform(data.copy()),2)