Mam ramkę danych pand z mnóstwem kategorycznych kolumn, które planuję wykorzystać w drzewie decyzyjnym w scikit-learn. Muszę przekonwertować je na wartości liczbowe (nie jeden gorący wektor). Mogę to zrobić za pomocą LabelEncoder z scikit-learn. Problem polega na tym, że jest ich zbyt wiele i nie chcę ich konwertować ręcznie.
Jaki byłby łatwy sposób zautomatyzować ten proces.
scikit-learn
pandas
categorical-data
labels
użytkownik1700890
źródło
źródło
Odpowiedzi:
Jeśli twoje kategorie są obecnie znakami / obiektami, możesz użyć czegoś takiego:
Jeśli chcesz wrócić do kategorii, stworzę słownik, aby zapisać kodowanie; coś jak:
Użycie mcve Juliena wyświetli:
źródło
object
kolumn jest użyteczny.Najpierw stwórzmy mcve do zabawy:
Teraz możemy użyć pd.get_dummies do zakodowania pierwszych trzech kolumn.
Zauważ, że używam tego
drop_first
parametru, ponieważN-1
manekiny są wystarczające, aby w pełni opisaćN
możliwości (np .: jeślia_Var2
ia_Var3
są 0, to jesta_Var1
). Również mam konkretnie określenie kolumn, ale nie muszą, jak to będzie kolumn dtype alboobject
lubcategorical
(więcej poniżej).W konkretnej aplikacji będziesz musiał podać listę kategorii, które są kategoryczne, lub będziesz musiał wnioskować, które kolumny są kategoryczne.
Najlepszy scenariusz Twój dataframe ma już tych kolumn z
dtype=category
i można przejśćcolumns=df.columns[df.dtypes == 'category']
doget_dummies
.W przeciwnym razie proponuję ustawienie
dtype
wszystkich pozostałych kolumn odpowiednio (wskazówka: pd.to_numeric, pd.to_datetime itp.), A pozostaniesz z kolumnami, które mają typ dtypeobject
i powinny to być twoje kolumny kategoryczne.Domyślne kolumny parametrów pd.get_dummies są następujące:
źródło
Aby przekonwertować typy wielu kolumn jednocześnie, użyłbym czegoś takiego:
Potem dołączyłem do nich z powrotem
original df
.źródło
df2[df2.columns] = df2[df2.columns].astype('category')
robi to samo, nieapply
, nielambda
.