Python вопросов по ColumnTransformer и SimpleImputer / OnehotEncoding - PullRequest
1 голос
/ 14 марта 2020

Я экспериментировал с python и columnTransformer, и у меня есть вопрос.

Это код, который работает. Он делает то, что я хочу, заполняет пустые ячейки чаще всего и использует одно кодирование, поэтому столбцы (только те двоичные функции, которые у меня есть) удваиваются после OneHotEncoding, как и должно быть. Каждое значение ячейки находится в строке.

cate_transformer = Pipeline(steps=[
    ('imputer3',SimpleImputer(missing_values='', strategy='most_frequent')),
    ('onehot3',OneHotEncoder(sparse=False))
    ])

ColumnTransformer(transformers=[
    ('num', cate_transformer, binary_cols)
    ])

X = prepro.fit_transform(X)

Это также работает, дает тот же самый результат, без ColumnTransformer:

BinImputer = SimpleImputer(missing_values='', strategy='most_frequent')
X = BinImputer.fit_transform(X)
Hot = OneHotEncoder(sparse=False)
X = Hot.fit_transform(X)

Теперь к моим вопросам ... Это не работает:

column_trans = ColumnTransformer(
remainder='passthrough',
transformers=[
     ('SimpleImputer', SimpleImputer(missing_values='', strategy='most_frequent'), binary_cols)
])

column_trans1 = ColumnTransformer(
remainder='passthrough',
transformers=[
     ('OneHotEncoder', OneHotEncoder(sparse=False), binary_cols)
])` 

 X = column_trans.fit_transform(X)
 X = column_trans1.fit_transform(X)

Это говорит: ValueError: not enough values to unpack (expected 3, got 2)

Кроме того, это не работает: когда я передаю фрейм данных с x строками и 2 столбцами, он возвращает x строк и 8 колонок. Посмотрите:

column_trans1 = ColumnTransformer(
remainder='passthrough',
transformers=[
     ('SimpleImputer', SimpleImputer(missing_values='', strategy='most_frequent'), binary_cols),
     ('OneHotEncoder', OneHotEncoder(sparse=False), binary_cols)
])

X = column_trans1.fit_transform(X)

До: введите описание изображения здесь

После: введите описание изображения здесь

1) Это кажется очень странным для меня. Почему в последнем коде общее количество столбцов равно x4, а не x2, как это должно быть в Onehotencoding. Кроме того: 2) Почему в последнем коде выполняется код (даже если он дает мне эти 8 столбцов вместо 4), тогда как в предыдущем коде я делаю то же самое, но в 2 этапа (или мне кажется, что я выполняю то же самое), это не работает вообще?

Итак, я должен упустить что-то важное в том, как они реализованы. Я попытался посмотреть на документацию, но не смог ее получить. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...