Pandy - Konwertuj wartości kategoryczne na wartości INT

Pandy - Konwertuj wartości kategoryczne na wartości INT

Zestawy danych do wykonywania uczenia maszynowego obejmują zarówno zmienne numeryczne, jak i kategoryczne. Zmienne kategoryczne to dane typu ciągów, które ludzie łatwo rozumieją. Z drugiej strony maszyny nie mogą bezpośrednio zrozumieć kategorycznych danych wejściowych. W konsekwencji zawartość kategoryczna musi zostać przekształcona w wartości numeryczne, które maszyny mogą interpretować.

W tym samouczku omówimy trzy różne sposoby konwersji wartości kategorycznych na wartości liczbowe w PandaS DataFrame

Podejście 1: Używanie zastąpienia ()

W Pythonie zastąpienie () służy do zmiany lub konwersji podanych wartości na nowe wartości, które określliśmy. Aby zastąpić wiele wartości, musimy przekazać dwie listy jako parametry. Pierwsza lista będzie przechowywać rzeczywiste wartości, które należy wymienić, a druga lista będzie przechowywać wartości zastępujące wartości na pierwszej liście.

Składnia

DataFrame_Object ['kolumna'] = dataFrame_Object ['kolumna'].Zamień ([wartość1, wartość2,…], [wartość1, wartość2,…])

Kolumna to nazwa kolumny, w której zastępujemy wartości.

Rozważ ramkę danych

Utwórzmy nazywaną ramkę danych Pandas zestawy które zawierają 4 kolumny z 10 wierszy.

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Rzeczywista ramka danych
Drukuj (zestawy)
# Wyświetl typy danych każdej kolumny
Drukuj (zestawy.Dtypes)

Wyjście

Kod priorytetowy wiek płciowy
0 1 High M 12
1 2 Low M 23
2 3 Low M 21
3 4 High F 34
4 5 Medium M 21
5 6 High M 23
6 7 Medium F 21
7 8 Low F 34
8 9 High M 56
9 0 Medium F 32
Kod Int64
obiekt priorytetowy
obiekt płci
Wiek Int64
DTYPE: Object

Widzimy dwie kolumny z typem kategorycznym (obiekt), i.mi., Priorytet i płeć.

Musimy więc przekonwertować je na wartości numeryczne/liczb całkowitych.

Przykład 1

Zastąpmy wartości w kolumnie płciowej metodą zastępowania ().

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Konwertuj wartości kategoryczne na wartości liczbowe w kolumnie płciowej
SETS [„GENDER”] = SETS [„Gender”].Wymień ([„M”, „F”], [1, 2])
Drukuj (zestawy)

Wyjście

Kod priorytetowy wiek płciowy
0 1 High 1 12
1 2 Low 1 23
2 3 Low 1 21
3 4 High 2 34
4 5 Medium 1 21
5 6 High 1 23
6 7 Medium 2 21
7 8 Low 2 34
8 9 High 1 56
9 0 Medium 2 32

Wyjaśnienie

Zastępujemy „M” 1 i „F” 2 i ponownie przechowujemy wartości kolumny w kolumnie płciowej. Widzimy, że kolumna płci utrzymuje wartości w ciągu 1 lub 2.

Przykład 2

Zastąpmy wartości w kolumnie priorytetowej za pomocą metody zastępczej ().

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Konwertuj wartości kategoryczne na wartości liczbowe w kolumnie priorytetowej
SETS ['priorytet'] = sets ['priorytet']].zamień ([„niski”, „medium”, „high”], [0,1,2])
Drukuj (zestawy)

Wyjście

Kod priorytetowy wiek płciowy
0 1 2 m 12
1 2 0 m 23
2 3 0 m 21
3 4 2 F 34
4 5 1 m 21
5 6 2 m 23
6 7 1 f 21
7 8 0 f 34
8 9 2 m 56
9 0 1 f 32

Wyjaśnienie

W kolumnie priorytetowej są trzy kategorie. Są „niskie”, „wysokie” i „medium”. Zastępujemy „niski” na 0, „medium” 1 i „high” z 2 i ponownie przechowując wartości kolumny w kolumnie priorytetowej.

Podejście 2: Zastosowanie (factorize ())

Drugą metodą, jaką podano nam pandy, jest „DataFrame.Apply () „Funkcja przekształcania wszystkich wartości kategorycznych w liczby całkowite.

Aby przekonwertować wiele kategorycznych kolumn na liczby całkowite, przestrzegaliśmy tej techniki:

  1. Musimy wybrać wszystkie kolumny zawierające danych dotyczących obiektów, stosując mnóstwo danych pandy.Select_dtypes ().Metoda kolumn.
  2. Aby przekonwertować te kolumny na liczby całkowite, musimy użyć pand 'DataFrame.Apply () „z” pandami.Factorize () „.

Metoda Factorize przyjmie wartość z typem danych „obiekt” i przekonwertuje ją na „int”.

Jeśli chcesz przekonwertować tylko wartości kategoryczne danej kolumny na liczby całkowite, wówczas zastosuj ().

Składnia dla pojedynczej kolumny

DataFrame_Object ['kolumna'] = pandy.Factorize (dataFrame_Object ['kolumna']) [0]

Składnia dla wszystkich kolumn

DataFrame_Object [DataFrame_Object.Select_dtypes (['obiekt']).kolumny] = DataFrame_Object [DataFrame_Object.Select_dtypes (['obiekt']).kolumny].Zastosuj (Lambda X: Pandy.Factorize (x) [0])

Notatka: Wymiana rozpocznie się od 0.

Przykład 1: Wymień wartości kategoryczne pojedynczej kolumny

Zastąpmy wartości w kolumnie płciowej metodą factorize ().

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
importować pandy
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Konwertuj wartości kategoryczne na liczby całkowite za pomocą metody factorize () obecnej w kolumnie płciowej
zestawy [„płeć”] = pandy.Factorize (zestawy [„płeć”]) [0]
# Rzeczywista ramka danych
Drukuj (zestawy)

Wyjście

Kod priorytetowy wiek płciowy
0 1 High 0 12
1 2 Low 0 23
2 3 Low 0 21
3 4 High 1 34
4 5 Medium 0 21
5 6 High 0 23
6 7 Medium 1 21
7 8 Low 1 34
8 9 High 0 56
9 0 Medium 1 32

Wyjaśnienie

Zastępujemy „M” 0 i „F” 1 i ponownie przechowujemy wartości kolumny w kolumnie płciowej. Teraz widzimy, że kolumna płci utrzymuje wartości w granicach 0 lub 1.

Przykład 2: Wymień wszystkie wartości kategoryczne kolumny

Zastąpmy wartości we wszystkich kolumnach za pomocą metody Applant (factorize ()).

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
importować pandy
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Wymień wszystkie wartości kategoryczne kolumny
zestawy [zestawy.Select_dtypes (['obiekt']).kolumny] = SETS [SETS.Select_dtypes (['obiekt']).kolumny].Zastosuj (Lambda X: Pandy.Factorize (x) [0])
Drukuj (zestawy)

Wyjście

Kod priorytetowy wiek płciowy
0 1 0 0 12
1 2 1 0 23
2 3 1 0 21
3 4 0 1 34
4 5 2 0 21
5 6 0 0 23
6 7 2 1 21
7 8 1 1 34
8 9 0 0 56
9 0 2 1 32

Wyjaśnienie

Widzimy w następujących:

  1. W kolumnie płciowej „M” zastępuje się 0, a „F” zastępuje się 1.
  2. Kolumna priorytetowa „Wysoka” jest zastępowana 0, „niski” zastępuje się 1, a „medium” zastępuje się 2.

Do tej pory widzieliśmy zastąpienie wartości kategorycznych na wartości całkowitej w pojedynczych lub wszystkich kolumnach o znanych wartości kategorycznych. Załóżmy, że istnieje ogromny zestaw danych z więcej niż jedną lakh rekordów. Jak zastąpić wartości kategoryczne?

Rozwiązaniem jest kodowanie etykiet.

Omówmy to podejście.

Podejście 3: Korzystanie z elegancoding

LabelenCoder () to metoda obecna wewnątrz modułu Sklearn, który przekonwertuje wartości kategoryczne określonej kolumny na liczbę całkowitą. Nie musimy określać wartości kategorycznych.

stosuje się metodę Fit_Transform () wraz z elegancoder (), która pasuje do wartości transformowanych.

W tej technice wymienione wartości zaczynają się od 0, a wymiana odbywa się w kolejności alfabetycznej wartości kategorycznych.

Składnia

DataFrame_Object ['kolumna'] = etykietencoder ().fit_transform (dataFrame_Object ['kolumna'])

Kolumna to nazwa kolumny, w której zastępujemy wartości.

Przykład

Zastąpmy wartości w płci, priorytetowe kolumny przy użyciu następującego podejścia:

# Zaimportuj ramkę danych z modułu pandaas
z Pandy Import DataFrame
importować pandy
# Import LabelenCoder z modułu Sklearn
ze Sklearn.Przedstawienie importowe etykietoder
# Utwórz ramkę danych z 10 wierszy, które zawierają 4 kolumny
sets = DataFrame („kod”: [1,2,3,4,5,6,7,8,9,0],
„Priorytet”: [„high”, „niski”, „niski”, „high”, „medium”, „high”, „medium”, „niski”, „high”, „medium”],
„Płeć”: [„M”, „M”, „M”, „F”, „M”, „M”, „F”, „F”, „M”, „F”],
„Wiek”: [12 23,21,34,21,23,21,34,56,32]))
# Konwertuj kategoryczne wartości kolumny płci na numeryczne
SETS [„GENDER”] = etykietencoder ().fit_transform (zestawy [„płeć”])
# Konwertuj kategoryczne wartości kolumny priorytetowej na numeryczne
zestawy [„priorytet”] = etykietencoder ().fit_transform (zestaw [„priorytet”])
Drukuj (zestawy)

Wyjście

Kod priorytetowy wiek płciowy
0 1 0 1 12
1 2 1 1 23
2 3 1 1 21
3 4 0 0 34
4 5 2 1 21
5 6 0 1 23
6 7 2 0 21
7 8 1 0 34
8 9 0 1 56
9 0 2 0 32

Wyjaśnienie

  1. Zastępujemy „M” 1 i „F” 2 i ponownie przechowujemy wartości kolumny w kolumnie płciowej. Teraz widzimy, że kolumna płci utrzymuje wartości w ciągu 1 lub 2.
  2. W kolumnie priorytetowej są trzy kategorie. Są „niskie”, „wysokie” i „medium”. Zastępujemy „niski” na 0, „medium” 1 i „high” z 2 i ponownie przechowując wartości kolumny w kolumnie priorytetowej.

Wniosek

Nasz przewodnik obraca się wokół przekształcania wartości kategorycznych na wartości numeryczne, aby mogły być zrozumiałe przez maszyny, ponieważ nie można przez nich przetworzyć danych obiektowych. Wprowadziliśmy Cię do trzech podejść przedstawionych przez bibliotekę „Pandy”, aby uzyskać wymagany danych. Pamiętaj, że powinieneś użyć podejścia etykietninging, ponieważ nie wiesz, ile kategorii jest obecnych w kolumnie pandas DataFrame.