Проведите кодирование с помощью OrdinalEncoder:
- Инициализируйте
OrdinalEncoderтак, чтобы кодировщик мог работать с неизвестными категориями и кодировал их какNaN. - Преобразуйте тестовые данные.
# импортируем библиотеки и объявляем константы
import pandas as pd
import numpy as np
from sklearn.preprocessing import OrdinalEncoder
RANDOM_STATE = 42
# подготавливаем данные заранее созданной функцией
# в код добавили игнорирование неизвестных категорий при кодировании OHE
X_train, X_test, y_train, y_test = prepare_data('railway_full.csv')
# создаём список со строковыми категориями для кодирования OrdinalEncoder
cols_ordinal = [
'Оценка комфортности покупки билета онлайн', 'Оценка качества wifi'
]
# создайте экземпляр класса OrdinalEncoder для кодирования
# закодируйте неизвестные категории пропусками
ordinal_encoder = OrdinalEncoder(
handle_unknown='use_encoded_value',
unknown_value=np.nan
)
# обучаем OrdinalEncoder на выбранных признаках из тренировочной выборки
# преобразовываем тренировочную выборку
X_train[cols_ordinal] = ordinal_encoder.fit_transform(X_train[cols_ordinal])
# преобразуйте тестовую выборку
X_test[cols_ordinal] = ordinal_encoder.transform(X_test[cols_ordinal])
# выводим пропуски в данных
print(X_test.isna().sum())
Результат
Возраст 0
Расстояние 0
Покупка билета онлайн 0
Питание включено 0
Наличие wifi 0
Оценка комфортности места 0
Оценка качества уборки 0
Оценка качества обслуживания в пути 0
Оценка комфортности покупки билета онлайн 1
Оценка качества wifi 0
Оценка комфортности времени отправления/прибытия 0
Общая оценка качества предоставленной услуги 0
Пол_муж 0
Путешествует с детьми_нет 0
Путешествует по работе_нет 0
Тип_плацкарт 0
Тип_св 0
Оценка качества питания_отсутствует 0
Оценка качества питания_плохо 0
Оценка качества питания_хорошо 0
dtype: int64