Панды: обрабатывать невидимые данные в тесте - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть тренировочный набор данных, и я строю некоторые модели машинного обучения. У меня нет доступа к тестовому комплекту, и я хочу разобраться с тем, что одна из категориальных характеристик в тесте не наблюдалась в поезде.

Вот игрушечный пример, иллюстрирующий, что я имею в виду:

У меня есть DataFrame, old, вот так:

old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})

Что выглядит так:

    car
0   Audi
1   BMW
2   Mazda

Я теперь одно горячее кодирование, как это:

new = pd.get_dummies(old)

и вернитесь:

   car_Audi car_BMW car_Mazda
0      1       0       0
1      0       1       0
2      0       0       1

Это все хорошо. Однако, если я столкнусь с строкой в ​​тесте, которая выглядит следующим образом:

    car
0   Mercedes

Я могу выполнить горячее кодирование, но в итоге получу столбец, которого у меня не было в тесте.

Есть ли способ в Пандах просто игнорировать значения в тесте, которых я не видел в поезде?

Таким образом, желаемый результат для моего ряда Mercedes будет:

   car_Audi car_BMW car_Mazda
0      0       0       0

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать reindex для достижения этого

old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})
new = pd.get_dummies(old)
test= pd.DataFrame({"car":["Audi", "BMW", "Mazda","Mercedes"]})
pd.get_dummies(test).reindex(columns=new.columns)
Out[460]: 
   car_Audi  car_BMW  car_Mazda
0         1        0          0
1         0        1          0
2         0        0          1
3         0        0          0 # row 3 will be all 0 after modified 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...