Предположим, у меня есть такой набор поездов:
Name | day
------------
First | 0
Second | 1
Third | 1
Forth | 2
И набор тестов, который не содержит всех этих имен или дней. Вот так:
Name | day
------------
First | 2
Second | 1
Forth | 0
У меня есть следующий код для преобразования этих столбцов в закодированные объекты:
features_to_encode = ['Name', 'day']
label_final = pd.DataFrame()
for feature in features_to_encode:
label_campaign = LabelBinarizer()
label_results = label_campaign.fit_transform(df[feature])
label_results = pd.DataFrame(label_results, columns=label_campaign.classes_)
label_final = pd.concat([label_final, label_results], axis=1)
df_encoded = label_final.join(df)
Для получения следующего вывода в поезде ( это прекрасно работает ):
First | Second | Third | Forth | 0 | 1 | 2 |
-----------------------------------------------
1 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 | 0 | 0 | 1 |
Однако, когда я запускаю это на тестовых данных (новые данные), я получаю несоответствующих функций, если тестовые данные не содержат точно все те же имена и дни, что и данные поезда . Поэтому, если бы я запустил подобный код в этом тестовом образце, я бы получил:
First | Second | Forth | 0 | 1 | 2 |
--------------------------------------
1 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 1 | 0 | 0 |
Что я могу сделать, чтобы сохранить то же преобразование из данных поезда и правильно применить его к тестовым данным, в результате чего желаемый вывод :
First | Second | Third | Forth | 0 | 1 | 2 |
-----------------------------------------------
1 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 | 1 | 0 | 0 |
Я уже пытался добавить dict, чтобы перехватить результаты fit_transform, но я не уверен, сработает ли это или что с этим делать потом:
features_to_encode = ['Name', 'day']
label_final = pd.DataFrame()
labels = {}--------------------------------------------------------------------> TRIED THIS
for feature in features_to_encode:
label_campaign = LabelBinarizer()
label_results = label_campaign.fit_transform(df[feature])
labels[feature] = label_results--------------------------------------------> WITH THIS
label_results = pd.DataFrame(label_results, columns=label_campaign.classes_)
label_final = pd.concat([label_final, label_results], axis=1)
df_encoded = label_final.join(df)
Любая помощь приветствуется. Спасибо =)