Mam ramkę danych z tego typu danymi (za dużo kolumn):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Kolumny wyglądają tak:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Chcę przekonwertować wszystkie wartości w kolumnach na liczbę całkowitą w następujący sposób:
[1, 2, 3, 4, 5, 6, 7, 8]
Rozwiązałem to dla jednej kolumny w ten sposób:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Teraz mam dwie kolumny w mojej ramce danych - starą col3
i nową c
i muszę usunąć stare kolumny.
To zła praktyka. To działa, ale w mojej ramce danych jest wiele kolumn i nie chcę tego robić ręcznie.
Jak to pythonowe i po prostu sprytnie?
df['col2'].cat.categories
na przykład.NaN
to wyjątkowo-1
cat.codes
mogą NIE być tymi, które widzisz w serii!To działa dla mnie:
Wynik:
źródło
Jeśli obawiałeś się tylko tego, że tworzysz dodatkową kolumnę i usuwasz ją później, po prostu dun użyj najpierw nowej kolumny.
Skończyłeś. Teraz, gdy
Categorical.from_array
jest przestarzałe, użyjCategorical
bezpośrednioJeśli potrzebujesz również mapowania z powrotem z indeksu na etykietę, istnieje jeszcze lepszy sposób na to samo
sprawdź poniżej
źródło
Tutaj należy przekonwertować wiele kolumn. Więc jedno podejście, którego użyłem, to ...
Spowoduje to konwersję wszystkich kolumn typu łańcuchowego / obiektowego na kategoryczne. Następnie stosuje kody do każdego typu kategorii.
źródło
Aby przekonwertować dane kategoryczne w kolumnie C danych zestawu danych , musimy wykonać następujące czynności:
źródło
To, co robię,
replace
ceni.Lubię to-
W ten sposób, jeśli
col
kolumna zawiera wartości jakościowe, zostaną one zastąpione wartościami liczbowymi.źródło
@ Quickbeam2k1, patrz poniżej -
Używanie sklearn
źródło
fit_transform
teraz zamiasttransform_fit
i poprawiłeś definicję labelencodera. Dlaczego używasziloc[:,:]
? to jest bezużyteczne. Jaki jest powód tego obrazu? Na wypadek, gdybyś chciał udowodnić mnie i @theGtknerd skrzywdzić, zawiodłeś.W przypadku określonej kolumny, jeśli nie zależy Ci na kolejności, użyj tego
Jeśli zależy Ci na kolejności, podaj je jako listę i użyj tego
źródło