Как преобразовать категориальный столбец, используя один горячий кодер в sklearn - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть фрейм данных с категориальным столбцом, и я пытаюсь one hot encode использовать его sklearn, используя приведенный ниже фрагмент

oneEncoder= OneHotEncoder()
features['COL2'] = features['COL2'].apply(lambda col :  oneEncoder.fit_transform(col))

, но он продолжает выдавать ValueError: Expected 2D array, got scalar array instead: array=1771. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

I тоже пробовал

oneEncoder= OneHotEncoder() #initializing an object of class LabelEncoder
oneEncoder.fit_transform( features['COL2'])

но выкидывает ValueError: Expected 2D array, got 1D array instead:

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Попробуйте:

oneEncoder.fit_transform(df[["Col2"]]).todense()

Предположим, у нас есть:

features = pd.DataFrame({"Col2":["a","b","c"]})

Тогда:

oneEncoder= OneHotEncoder()
oneEncoder.fit_transform(features[["Col2"]]).todense()
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

Если вы имеете дело с Series объектом, вы можете wi sh изменить его:

oneEncoder.fit_transform(features.Col2.values.reshape(-1,1)).todense()
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

Удаление todense() метод оставит ваше преобразование в разреженной матрице.

И, наконец, вы можете всегда декодировать то, что столбцы Ваша матрица означает:

oneEncoder.categories_
[array(['a', 'b', 'c'], dtype=object)]

Не удивительно, что они являются вашими уникальными входными данными, упорядоченными в алфавитном порядке.

0 голосов
/ 18 февраля 2020

вы можете сделать напрямую

categories = pd.get_dummies(features['COL2'])

в противном случае вы можете передать вместо него 2d массив

oneEncoder.fit_transform( features[['COL2']].values)
...