Sklearn-Pandas DataFrameMapper:mapper.fit_transform给出了ValueError:错误的输入形状(8,2)

时间:2016-07-27 17:47:07

标签: python pandas sklearn-pandas

我能够复制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)

有人可以帮忙吗?

感谢

1 个答案:

答案 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)