OneHotEncoder categoryor_features устарела, как преобразовать конкретный столбец - PullRequest
0 голосов
/ 24 января 2019

Мне нужно преобразовать независимое поле из строки в арифметическую запись.Я использую OneHotEncoder для преобразования.В моем наборе данных есть много независимых столбцов, некоторые из которых имеют вид:

Country     |    Age       
--------------------------
Germany     |    23
Spain       |    25
Germany     |    24
Italy       |    30 

Мне нужно закодировать столбец Country, например

0     |    1     |     2     |       3
--------------------------------------
1     |    0     |     0     |      23
0     |    1     |     0     |      25
1     |    0     |     0     |      24 
0     |    0     |     1     |      30

Мне удалось получить преобразование желаний с помощью OneHotEncoder в качестве

#Encoding the categorical data
from sklearn.preprocessing import LabelEncoder

labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])

#we are dummy encoding as the machine learning algorithms will be
#confused with the values like Spain > Germany > France
from sklearn.preprocessing import OneHotEncoder

onehotencoder = OneHotEncoder(categorical_features=[0])
X = onehotencoder.fit_transform(X).toarray()

Теперь я получаю сообщение об амортизации для использования categories='auto'.Если я сделаю это, преобразование будет выполнено для всех независимых столбцов, таких как страна, возраст, зарплата и т. Д.

Как выполнить преобразование только в 0-м столбце набора данных?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Есть способ, которым вы можете сделать одну горячую кодировку с пандами. Python:

import pandas as pd
ohe=pd.get_dummies(dataframe_name['column_name'])

Дайте имена вновь сформированным столбцам и добавьте их в свой фрейм данных. Проверьте документацию панд здесь .

0 голосов
/ 25 января 2019

На самом деле есть 2 предупреждения:

FutureWarning: обработка целочисленных данных изменится в версии 0,22. В настоящее время категории определяются на основе диапазона [0, max (values)], а в будущем они будут определяться на основе уникальные ценности. Если вы хотите, чтобы будущее поведение и замолчать это предупреждение, вы можете указать "category = 'auto'". Если вы использовали LabelEncoder перед этим OneHotEncoder для преобразования категорий в целые числа, то теперь вы можете напрямую использовать OneHotEncoder.

и второй:

Ключевое слово categoryorical_features устарело в версии 0.20 и будет удален в 0,22. Вместо этого вы можете использовать ColumnTransformer.
"вместо этого используйте ColumnTransformer.", DeprecationWarning)

В будущем вам не следует определять столбцы в OneHotEncoder напрямую, если только вы не хотите использовать "category = 'auto'". В первом сообщении также говорится, что вы должны использовать OneHotEncoder напрямую, без LabelEncoder. Наконец, второе сообщение говорит вам использовать ColumnTransformer, который похож на трубу для преобразования столбцов.

Вот эквивалентный код для вашего случая:

from sklearn.compose import ColumnTransformer 
ct = ColumnTransformer([("Name_Of_Your_Step", OneHotEncoder(),[0])], remainder="passthrough")) # The last arg ([0]) is the list of columns you want to transform in this step
ct.fit_transform(X)    

См. Также: Документация ColumnTransformer

...