Создайте общий пайплайн подготовки данных, который объединит пайплайны обработки категориальных признаков и масштабирование количественных:

  1. Шаг ohe: используйте пайплайн для обработки данных из списка ohe_columns.
  2. Шаг ord: используйте пайплайн для обработки данных из списка ord_columns.
  3. Шаг num: нормализуйте данные из списка num_columns с помощью MinMaxScaler().
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

# загружаем нужные классы
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer

from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder, StandardScaler, MinMaxScaler

# загружаем класс для работы с пропусками
from sklearn.impute import SimpleImputer

# загружаем нужные метриками
from sklearn.metrics import roc_auc_score

# импортируем библиотеку для загрузки моделей
from sklearn.tree import DecisionTreeClassifier

RANDOM_STATE = 42
TEST_SIZE = 0.25

# загружаем данные
df_full = pd.read_csv('railway_full.csv')

X_train, X_test, y_train, y_test = train_test_split(
    df_full.drop(
        [
            'Удовлетворён предоставленной услугой',
            'Общая оценка качества предоставленной услуги'
        ], 
        axis=1
    ),
    df_full['Удовлетворён предоставленной услугой'],
    test_size = TEST_SIZE, 
    random_state = RANDOM_STATE,
    stratify = df_full['Удовлетворён предоставленной услугой']
)

# создаём списки с названиями признаков
ohe_columns = [
    'Пол', 'Путешествует с детьми', 'Путешествует по работе', 
    'Тип', 'Оценка качества питания'
]
ord_columns = [
    'Оценка комфортности покупки билета онлайн', 'Оценка качества wifi', 
    'Оценка комфортности времени отправления/прибытия'
]
num_columns = ['Возраст', 'Расстояние']

# создаём пайплайн для подготовки признаков из списка ohe_columns: заполнение пропусков и OHE-кодирование
# SimpleImputer + OHE
ohe_pipe = Pipeline(
    [
        (
            'simpleImputer_ohe', 
            SimpleImputer(missing_values=np.nan, strategy='most_frequent')
        ),
        (
            'ohe', 
            OneHotEncoder(drop='first', handle_unknown='ignore', sparse=False)
        )
    ]
)

# cоздаём пайплайн для подготовки признаков из списка ord_columns: заполнение пропусков и Ordinal-кодирование
# SimpleImputer + OE
ord_pipe = Pipeline(
    [
        (
            'simpleImputer_before_ord', 
            SimpleImputer(missing_values=np.nan, strategy='most_frequent')
        ),
        (
            'ord',
            OrdinalEncoder(
                categories=[
                    ['нормально', 'хорошо', 'плохо', 'отсутствует'],
                    ['нормально', 'хорошо', 'плохо', 'отсутствует'],
                    ['нормально', 'хорошо', 'плохо'],
                ], 
                handle_unknown='use_encoded_value',
                unknown_value=np.nan
            )
        ),
        (
            'simpleImputer_after_ord', 
            SimpleImputer(missing_values=np.nan, strategy='most_frequent')
        )
    ]
)

# создайте общий пайплайн для подготовки данных
data_preprocessor = ColumnTransformer(
    [
        ('ohe', ohe_pipe, ohe_columns),
        ('ord', ord_pipe, ord_columns),
        ('num', MinMaxScaler(), num_columns)    
    ], 
    remainder =  'passthrough'
)
print(data_preprocessor)

Результат
ColumnTransformer(remainder='passthrough',
                  transformers=[('ohe',
                                 Pipeline(steps=[('simpleImputer_ohe',
                                                  SimpleImputer(strategy='most_frequent')),
                                                 ('ohe',
                                                  OneHotEncoder(drop='first',
                                                                handle_unknown='ignore',
                                                                sparse=False))]),
                                 ['Пол', 'Путешествует с детьми',
                                  'Путешествует по работе', 'Тип',
                                  'Оценка качества питания']),
                                ('ord',
                                 Pipeline(steps=[('simpleImputer_before_ord'...
                                                                              'хорошо',
                                                                              'плохо',
                                                                              'отсутствует'],
                                                                             ['нормально',
                                                                              'хорошо',
                                                                              'плохо']],
                                                                 handle_unknown='use_encoded_value',
                                                                 unknown_value=nan)),
                                                 ('simpleImputer_after_ord',
                                                  SimpleImputer(strategy='most_frequent'))]),
                                 ['Оценка комфортности покупки билета онлайн',
                                  'Оценка качества wifi',
                                  'Оценка комфортности времени '
                                  'отправления/прибытия']),
                                ('num', MinMaxScaler(),
                                 ['Возраст', 'Расстояние'])])