Я экспериментировал с 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 этапа (или мне кажется, что я выполняю то же самое), это не работает вообще?
Итак, я должен упустить что-то важное в том, как они реализованы. Я попытался посмотреть на документацию, но не смог ее получить. Заранее спасибо.