Как я могу использовать кодировщик sklearn label и напрямую применить к моему фрейму данных - PullRequest
0 голосов
/ 04 октября 2018

У меня есть фрейм данных, и я хочу использовать LabelEncoder непосредственно на нем.

Фрейм данных:

df.select_dtypes('object').iloc[:,1:]

  Gender  Married x_y   x_z 
0   Male    No     0     No       
1   Male    Yes    1     No         
2   Male    Yes    2     Yes        
3   Male    Yes    3+    No   
4   Male    No     1     No     

Я пробовал:

le = LabelEncoder()
df.select_dtypes('object').iloc[:,1:].apply(le.fit_transform, axis=1)

Ошибка типа: ("'<' не поддерживается между экземплярами 'float' и 'str'", 'произошла в индексе 11') </p>

df.select_dtypes('object').iloc[:,1:].apply(LabelEncoder.fit_transform)

TypeError: ("fit_transform ()отсутствует 1 обязательный позиционный аргумент: 'y' ", 'произошел в индексе Gender')

Любая помощь в том, как его использовать.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Предполагая, df - это ваш отфильтрованный кадр данных, который вы хотите преобразовать (например, в соответствии с вашим примером в вопросе):

>>> df.apply(LabelEncoder().fit_transform)
   Gender  Married  x_y  x_z
0       0        0    0    0
1       0        1    1    0
2       0        1    2    1
3       0        1    3    0
4       0        0    1    0

Чтобы сделать его более общим для декодирования, вам нужно отслеживать свою меткукодировщики (я использовал словарь, связанный с именами столбцов данных).Затем вам нужно соответствовать каждому.

encoders = {col: LabelEncoder().fit(df[col]) for col in df}

encoded_df = pd.DataFrame(
    {col: encoders[col].transform(df[col]) for col in df},
    index=df.index)
>>>encoded_df
   Gender  Married  x_y  x_z
0       0        0    0    0
1       0        1    1    0
2       0        1    2    1
3       0        1    3    0
4       0        0    1    0

decoded_df = pd.DataFrame(
    {col: encoders[col].inverse_transform(encoded_df[col]) for col in encoded_df},
    index=encoded_df.index)
  Gender Married x_y  x_z
0   Male      No   0   No
1   Male     Yes   1   No
2   Male     Yes   2  Yes
3   Male     Yes  3+   No
4   Male      No   1   No
0 голосов
/ 04 октября 2018

Самый простой способ, который я могу себе представить, - это выбрать столбцы объекта, затем просмотреть их циклом и fit_transform(), используя LabelEncoder

for col in df.select_dtypes(object).columns:
    df[col]=LabelEncoder().fit_transform(df[col])
...