Как одним способом закодировать большой фрейм данных, когда несколько столбцов содержат одинаковые значения?

Название по сути отражает мою проблему.

У меня есть фрейм данных, и несколько столбцов имеют такие значения, как [0,1], и если бы я пошел и один горячо закодировал df, у меня было бы несколько столбцов с тем же именем.

Утомительным решением было бы вручную создать уникальные столбцы, но у меня есть 58 столбцов, которые являются категориальными, поэтому это не кажется очень эффективным.

Не уверен, что это будет полезно, но вот head() моего фрейма данных.

x2  x3  x4  x5  x6  x7  x8  x9  x10 x11 ... z217    z218    z219    z220    z221    z222    subject phase   state   output
0   0   0   1   -300.361218 0.886360    -2.590886   225.001899  0.006204    0.000037    -0.000013   ... 0.005242    0.024971    -1017.620978    -382.850838 -48.275711  -2.040336   A   3   B   0
1   0   0   1   -297.126090 0.622211    -3.960940   220.179017  0.006167    -0.000014   -0.000003   ... 0.001722    0.023595    91.229094   24.802230   1.783950    0.022620    A   3   C   0
2   0   0   1   -236.460253 0.423640    -12.656341  139.453445  0.006276    -0.000028   0.000022    ... -0.010894   -0.036318   -188.232347 -17.474861  -1.005571   -0.021628   A   3   B   0
3   0   0   1   33.411458   2.854415    -1.962432   3.208911    0.009752    -0.000273   -0.000024   ... -0.034184   -0.047734   185.122907  -549.282067 542.193381  -178.049926 A   3   A   0
4   0   0   1   -118.125214 2.009809    -3.291637   34.874176   0.007598    0.000001    -0.000022   ... 0.001963    0.004084    35.207794   -78.143166  57.084208   -13.700212  A   4   C   0

person madsthaks    schedule 09.10.2017    source источник
comment
Здесь применяется минимальный, полный, проверяемый пример. Приведите пример ввода проблемы (ни один из ваших столбцов здесь не имеет значений 0, 1, 2) и полученный DF, который вы хотели бы увидеть. Избавьтесь от посторонней информации (или просто оставьте пару столбцов).   -  person Prune    schedule 10.10.2017
comment
Я буду иметь это в виду, спасибо   -  person madsthaks    schedule 10.10.2017


Ответы (2)


Вы, наверное, уже используете pandas.get_dummies? В противном случае эта функция преобразует категориальные столбцы в несколько столбцов индикатора (одно горячее кодирование).

У этой функции есть аргумент «префикс», который существует специально для вашего случая. Это может быть список строк (длина должна быть равна количеству столбцов в фрейме данных). Однако в вашем случае вы можете сделать его словарем, в котором вы будете сопоставлять имена столбцов с префиксами. Итак, что-то вроде:

pd.get_dummies(df, prefix={'x3': 'x3', 'x4': 'x4'})

Это приведет к дополнительным столбцам, например x3_0, x3_1 ... x4_0, x4_1 ...

person shikhanshu    schedule 09.10.2017
comment
@madsthaks был бы признателен, если бы вы приняли мой ответ - person shikhanshu; 10.10.2017

Вы можете прочитать данные и сначала получить список всех уникальных значений ваших категориальных переменных. Затем вы можете поместить один объект горячего кодировщика (например, sklearn.preprocessing.CategoricalEncoder) в свой список уникальных значений.

Этот метод также может помочь в тестовой среде поездов или при чтении данных по частям. Я создал модуль Python, который делает все это самостоятельно. Вы можете найти его в этом репозитории GitHub - dummyPy.

Краткое руководство по этому поводу - Как с помощью одной функции горячего кодирования категориальных переменных в Python?

person Yashu Seth    schedule 14.12.2017