Ошибка при преобразовании категориальных переменных с помощью OneHotEncoder: ValueError: Expected 2D array, got 1D array instead

Пытаюсь преобразовать категориальные переменные с помощью OneHotEncoder:

from sklearn.preprocessing import OneHotEncoder

cat_features = ['MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaymentMethod'][![введите сюда описание изображения][1]][1]

    OHE = OneHotEncoder(drop='first')
    
    users_transform = pd.DataFrame()
    
        for item in cat_features:
            users_transform[item] = OHE.fit_transform(users_eda[item].values)

, но выдаёт ошибку:

ValueError: Expected 2D array, got 1D array instead: array=['Male' 'Female' 'Female' ... 'Male' 'Male' 'Male']. 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.

 датафрейм users_eda[cat_features] выглядит следующим образом


Ответы (1 шт):

Автор решения: MaxU

Можно сделать тоже самое средствами Pandas:

In [32]: df
Out[32]:
   id     a     b     c
0   1    aa    bb    cc
1   2   aaa   bbb   ccc
2   3  aaaa  bbbb  cccc

In [33]: cat_features = ["a", "b", "c"]

In [34]: res = \
    ...:     df.select_dtypes(exclude=['object']) \
    ...:       .join(pd.get_dummies(df.select_dtypes(include=['object']), drop_first=True))

In [35]: res
Out[35]:
   id  a_aaa  a_aaaa  b_bbb  b_bbbb  c_ccc  c_cccc
0   1      0       0      0       0      0       0
1   2      1       0      1       0      1       0
2   3      0       1      0       1      0       1
→ Ссылка