перебирать столбцы панд для кодирования объекта dtype в категориальное значение - PullRequest
0 голосов
/ 08 марта 2019

У меня есть набор данных, полный категориальных значений, которые не закодированы в данный момент. Например, у меня есть переменная с именем condition, которая имеет следующие значения: Very Excellent, Excellent, Very Good

Я хочу закодировать их (дать им целочисленные значения), чтобы я мог использовать их в качестве категориальных фиктивных переменных в регрессии. Однако в моем фрейме данных их много, поэтому я бы хотел перебирать каждый столбец и кодировать все объекты dtype. Это моя попытка:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
enc=LabelEncoder()

for column in df_06:
    if df_06["column"].values==object:
        df_06["column"]=enc.fit_transform(df_06["column"])

Мой фрейм данных

my df

Ошибка:

<ipython-input-48-ea6aec86108f> in <module>()
1 for column in df_06:
----> 2 if df_06[column].values==object:
3 df_06[column]=enc.fit_transform(df_06[column])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Перед кодированием убедитесь, что ваши столбцы представлены как category:

df_06[list_of_columns_to_encode].apply(lambda col: col.astype('category'))
  1. Теперь, если вы хотите выполнить горячее кодирование, почему бы не использовать pd.get_dummies напрямую?

    pd.get_dummies(df_06, columns=[list_of_columns_to_encode])
    
  2. Если вы хотите использовать LabelEncoder, попробуйте что-то вроде этого:

    le = LabelEncoder()
    df_06[list_of_columns_to_encode].apply(le.fit_transform)
    

    См. этот ответ, если вы хотите узнать больше о том, как transform будущие данные, используя тот же самый LabelEncoder словарь.

1 голос
/ 08 марта 2019

В цикле for много ошибок. Например, pd ["column"] не будет вызывать столбец значения. Также вы пытаетесь сравнить полный столбец с единственным значением «объект» (ошибка, о которой вы сообщили в комментариях).

Для решения вашей проблемы вы можете использовать

 for column in df.select_dtypes(include=['whatever_type_you_want']):
    df[column], _ = pd.factorize(df[column])

select_dtypes также может принимать исключение в качестве аргумента.

...