Инициализируйте OneHotEncoder так, чтобы неизвестные значения были проигнорированы и первый столбец с новым признаком был удалён.
Затем удалите преобразованные признаки из тренировочной и тестовой выборок.
Обратите внимание: чтобы решить эту задачу, нужно использовать инструменты, доступные в более новых версиях sklearn. Код ниже будет выполнен в среде с обновлённой версией библиотеки. Поэтому вместо get_feature_names() применяется команда get_feature_names_out().
# импортируем библиотеки и объявляем константы
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
RANDOM_STATE = 42
TEST_SIZE = 0.25
# считываем данные из CSV-файла
df_full = pd.read_csv('railway_full.csv')
# делим данные на входные и целевые
X = df_full.drop(['Удовлетворён предоставленной услугой'], axis=1)
y = df_full['Удовлетворён предоставленной услугой']
# делим данные на тренировочные и тестовые
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=TEST_SIZE,
random_state=RANDOM_STATE,
stratify=y)
# создаём список со строковыми категориями для кодирования
cols_ohe = [
'Пол', 'Путешествует с детьми', 'Путешествует по работе',
'Тип', 'Оценка качества питания'
]
# создайте экземпляр класса OneHotEncoder для кодирования
# игнорируйте неизвестные категории
oh_encoder = OneHotEncoder(drop='first', handle_unknown='ignore', sparse=False)
# обучаем OneHotEncoder на категориальных признаках из тренировочной выборки
oh_encoder.fit(X_train[cols_ohe])
# сохраняем в переменной encoder_col_names список названий новых столбцов
encoder_col_names = oh_encoder.get_feature_names_out()
# преобразовываем категориальные переменные в тренировочной и тестовой выборках
X_train[encoder_col_names] = oh_encoder.transform(X_train[cols_ohe])
X_test[encoder_col_names] = oh_encoder.transform(X_test[cols_ohe])
# удалите преобразованные признаки
X_train = X_train.drop(cols_ohe, axis=1)
X_test = X_test.drop(cols_ohe, axis=1)
# выводим первые пять строк
print(X_train.head())
Результат
Возраст ... Оценка качества питания_хорошо
6317 39 ... 1.0
406 24 ... 0.0
5202 60 ... 0.0
4983 29 ... 0.0
2654 58 ... 0.0
[5 rows x 20 columns]