Ошибка при преобразовании категориальных переменных с помощью 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.
Ответы (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
![датафрейм users_eda[cat_features] выглядит следующим образом](https://i.stack.imgur.com/yqtfI.png)