ColumnTransformer Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import HistGradientBoostingClassifier
num_features = ['age', 'income', 'score']
cat_features = ['color', 'city', 'gender']
preprocessor = ColumnTransformer([
('num', Pipeline([
('impute', SimpleImputer(strategy='median')),
('scale', StandardScaler()),
]), num_features),
('cat', Pipeline([
('impute', SimpleImputer(strategy='most_frequent')),
('encode', OneHotEncoder(handle_unknown='ignore')),
]), cat_features),
])
full_pipe = Pipeline([
('preprocess', preprocessor),
('model', HistGradientBoostingClassifier()),
])
full_pipe.fit(X_train, y_train)
print(f"Test: {full_pipe.score(X_test, y_test):.3f}")