как обрабатывать неизвестное категориальное значение в одной горячей кодировке в pandas - PullRequest
2 голосов
/ 04 августа 2020

У меня есть pandas dataframe, на котором я выполняю одно горячее кодирование с использованием метода get_dummies.

Вот пример кода -

import pandas as pd
X = pd.DataFrame( ['a','a,b','a,c'], columns = ['category'])
X.head()
  category
0        a
1      a,b
2      a,c

Вот как я это делаю горячее кодирование

X_transformed = pd.concat([X, X['category'].str.get_dummies(sep=',')], axis=1)
X_transformed.head()
  category  a  b  c
0        a  1  0  0
1      a,b  1  1  0
2      a,c  1  0  1

Проблема в том, что когда я получаю запись с неизвестным категориальным значением, я не знаю, как лучше всего с этим справиться -

y = pd.DataFrame(['a','d'], columns = ['category'])
y.head()
  category
0        a
1        d

Если я снова сделаю get_dummies на этом новом фрейме данных, тогда я получаю что-то вроде

y_transformed = pd.concat([y, y['category'].str.get_dummies(sep=',')], axis=1)
y_transformed.head()

  category  a  d
0        a  1  0
1        d  0  1

, тогда как мой ожидаемый результат -

  category  a  b  c
0        a  1  0  0
1        d  0  0  0

, потому что категория d никогда раньше не встречалась в первое место, поэтому я хочу пренебречь этим, сделав все флаги столбцов a,b,c равными 0.

Как я могу добиться этого в pandas?

1 Ответ

1 голос
/ 04 августа 2020

Используйте DataFrame.reindex на axis=1 с fill_value=0:

y_transformed = y_transformed.reindex(X_transformed.columns, axis=1, fill_value=0)

Результат:

  category  a  b  c
0        a  1  0  0
1        d  0  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...