Я думаю, вы ищете pandas.get_dummies
См. Следующий пример.
df = pd.DataFrame({"col_a":['cat','dog','cat','mouse','mouse','cat'], 'col_b':[10,14,16,18,20,22], 'col_c':['a','a','a','b','b','a']})
# `drop_first` parameter will drop the one categorical column
df = pd.get_dummies(df, columns=['col_a','col_c'], drop_first=True)
print(df)
Вывод:
col_b col_a_dog col_a_mouse col_c_b
0 10 0 0 0
1 14 1 0 0
2 16 0 0 0
3 18 0 1 1
4 20 0 1 1
5 22 0 0 0
Он охватывает первые 2 условия, которые вы упомянули.
Для 3-го условия вы можете сделать следующее.
- создать макеты на тренировочных данных
dummy_train = pd.get_dummies(train)
- создать макеты в новом (невидимые данные)
dummy_new = pd.get_dummies(new_data)
- переиндексировать новые данные в столбцах обучающих данных, заполняя недостающие значения 0
dummy_new.reindex(columns = dummy_train.columns, fill_value=0)
Фактически, любые новые функции, которые являются категоричными, не попадут в классификатор, но я думаю, что это не должно вызывать проблем, поскольку он не знает, что с ними делать.