Python Pandas - dane kategoryczne
Często w czasie rzeczywistym dane zawierają powtarzalne kolumny tekstowe. Funkcje takie jak płeć, kraj i kody są zawsze powtarzalne. Oto przykłady danych kategorycznych.
Zmienne kategorialne mogą przyjmować tylko ograniczoną i zwykle stałą liczbę możliwych wartości. Oprócz stałej długości dane kategorialne mogą mieć kolejność, ale nie mogą wykonywać operacji numerycznych. Kategoryczne to typ danych Pandy.
Kategoryczny typ danych jest przydatny w następujących przypadkach:
Zmienna łańcuchowa składająca się tylko z kilku różnych wartości. Przekształcenie takiej zmiennej łańcuchowej na zmienną kategorialną pozwoli zaoszczędzić trochę pamięci.
Porządek leksykalny zmiennej nie jest taki sam, jak porządek logiczny („jeden”, „dwa”, „trzy”). Konwertując na kategorię i określając kolejność kategorii, sortowanie i min / max użyją kolejności logicznej zamiast porządku leksykalnego.
Jako sygnał dla innych bibliotek Pythona, że ta kolumna powinna być traktowana jako zmienna kategorialna (np. Aby zastosować odpowiednie metody statystyczne lub typy wykresów).
Tworzenie obiektów
Obiekt kategorialny można utworzyć na wiele sposobów. Poniżej opisano różne sposoby -
Kategoria
Określając dtype jako „kategorię” podczas tworzenia obiektów pandy.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
Jego output wygląda następująco -
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
Liczba elementów przekazanych do obiektu serii to cztery, ale kategorie to tylko trzy. Obserwuj to samo w wyjściowych kategoriach.
pd. kategoryczne
Korzystając ze standardowego konstruktora kategorii pandy, możemy utworzyć obiekt kategorii.
pandas.Categorical(values, categories, ordered)
Weźmy przykład -
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
Jego output wygląda następująco -
[a, b, c, a, b, c]
Categories (3, object): [a, b, c]
Spójrzmy na inny przykład -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat
Jego output wygląda następująco -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]
Tutaj drugi argument oznacza kategorie. W ten sposób każda wartość, której nie ma w kategoriach, będzie traktowana jakoNaN.
Teraz spójrz na następujący przykład -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat
Jego output wygląda następująco -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
Logicznie rzecz biorąc, zamówienie oznacza, że a jest większy niż b i b jest większy niż c.
Opis
Używając .describe() polecenie na danych kategorycznych, otrzymujemy podobny wynik do pliku Series lub DataFrame z type strunowy.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
print df.describe()
print df["cat"].describe()
Jego output wygląda następująco -
cat s
count 3 3
unique 2 2
top c c
freq 2 2
count 3
unique 2
top c
freq 2
Name: cat, dtype: object
Pobierz właściwości kategorii
obj.cat.categories polecenie służy do pobierania pliku categories of the object.
import pandas as pd
import numpy as np
s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories
Jego output wygląda następująco -
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered polecenie służy do uzyskania kolejności obiektu.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered
Jego output wygląda następująco -
False
Funkcja zwróciła false ponieważ nie określiliśmy żadnego zamówienia.
Zmiana nazw kategorii
Zmiana nazw kategorii odbywa się poprzez przypisanie nowych wartości do series.cat.categoriesseries.cat.categories, właściwość.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories
Jego output wygląda następująco -
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Kategorie początkowe [a,b,c] są aktualizowane przez s.cat.categories własność obiektu.
Dołączanie nowych kategorii
Za pomocą metody Categorical.add.categories () można dołączać nowe kategorie.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories
Jego output wygląda następująco -
Index([u'a', u'b', u'c', 4], dtype='object')
Usuwanie kategorii
Używając Categorical.remove_categories() niechciane kategorie mogą zostać usunięte.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s
print ("After removal:")
print s.cat.remove_categories("a")
Jego output wygląda następująco -
Original object:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
After removal:
0 NaN
1 b
2 c
3 NaN
dtype: category
Categories (2, object): [b, c]
Porównanie danych kategorialnych
Porównanie danych kategorycznych z innymi obiektami jest możliwe w trzech przypadkach -
porównywanie równości (== i! =) z obiektem podobnym do listy (lista, seria, tablica, ...) o tej samej długości co dane jakościowe.
wszystkie porównania (==,! =,>,> =, <i <=) danych kategorialnych z innymi seriami jakościowymi, gdy uporządkowane == Prawda i kategorie są takie same.
wszystkie porównania danych kategorialnych ze skalarem.
Spójrz na następujący przykład -
import pandas as pd
cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
print cat>cat1
Jego output wygląda następująco -
0 False
1 False
2 True
dtype: bool