首页 > 解决方案 > 拟合 ColumnTransformer 时出现 ValueError

问题描述

我正在尝试在我的数据集上安装一个 ColumnTransformer,它有 6 列(标记为 C1、C2、... C6)。我编写了以下代码来创建我的转换器。

dummyData = pd.DataFrame({
    'C1' : ['2017-01-01', '2017-01-02','2017-01-03','2017-01-04','2017-01-05'],
    'C2' : ['W1','W2','W3','W4','W5'],
    'C3' : [np.NaN, np.NaN, 213727, 213613, 217636],
    'C4' : [np.NaN,0,3,2.5,np.NaN],
    'C5' : [0,0,3,5.5,5.5],
    'C6' : [487.15,273.15,364.15,463.25,373.15]
})
preprocessor = ColumnTransformer(transformers = [
          ('missing_ind',MissingIndicator(), ['C3','C4']),
          ('impute_num',SimpleImputer(strategy='median'),['C3','C4','C5']),
          ('ordinalEncoder', OrdinalEncoder(), ['C2']),
          ('scaler', StandardScaler())
], remainder='passthrough')

precprocessor.fit_transform(dummyData) 

但是我收到以下错误。

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-17-84099700df4f> in <module>()
----> 1 preprocessor.fit(dummyData)

2 frames

/usr/local/lib/python3.6/dist-packages/sklearn/compose/_column_transformer.py in _validate_transformers(self)
    271             return
    272 
--> 273         names, transformers, _ = zip(*self.transformers)
    274 
    275         # validate names

ValueError: not enough values to unpack (expected 3, got 2)

我不确定是什么导致了这个错误,希望能得到帮助。

标签: pythonmachine-learningscikit-learn

解决方案


阅读错误代码我们可以看到两件事:

  1. 错误源于我们只给需要三个值的函数提供两个值
  2. 我们可以看到错误发生在我们尝试适配 ColumnTransformer 时,更具体地说,是在我们设置单个转换器时。

使用该信息并查看此信息:

preprocessor = ColumnTransformer(transformers = [
          ('missing_ind',MissingIndicator(), ['C3','C4']),
          ('impute_num',SimpleImputer(strategy='median'),['C3','C4','C5']),
          ('ordinalEncoder', OrdinalEncoder(), ['C2']),
          ('scaler', StandardScaler())
], remainder='passthrough')

我们可以看到,除了最后一个缩放器之外,每个其他转换器都被赋予了 3 个值(名称、转换器、列)。

指定你希望最后一个缩放器影响的列,因此给它它需要的第三个值,将消除错误。


推荐阅读