Python Pandas - Kategoriale Daten
Oft enthalten Daten in Echtzeit die Textspalten, die sich wiederholen. Funktionen wie Geschlecht, Land und Codes wiederholen sich immer. Dies sind die Beispiele für kategoriale Daten.
Kategoriale Variablen können nur eine begrenzte und normalerweise feste Anzahl möglicher Werte annehmen. Neben der festen Länge haben kategoriale Daten möglicherweise eine Reihenfolge, können jedoch keine numerische Operation ausführen. Kategorisch sind ein Pandas-Datentyp.
Der kategoriale Datentyp ist in den folgenden Fällen hilfreich:
Eine Zeichenfolgenvariable, die nur aus wenigen unterschiedlichen Werten besteht. Das Konvertieren einer solchen Zeichenfolgenvariablen in eine kategoriale Variable spart Speicherplatz.
Die lexikalische Reihenfolge einer Variablen entspricht nicht der logischen Reihenfolge ("eins", "zwei", "drei"). Durch die Konvertierung in eine Kategorie und die Angabe einer Reihenfolge in den Kategorien verwenden Sortierung und Min / Max die logische Reihenfolge anstelle der lexikalischen Reihenfolge.
Als Signal an andere Python-Bibliotheken, dass diese Spalte als kategoriale Variable behandelt werden sollte (z. B. um geeignete statistische Methoden oder Diagrammtypen zu verwenden).
Objekterstellung
Kategoriale Objekte können auf verschiedene Arten erstellt werden. Die verschiedenen Möglichkeiten wurden unten beschrieben -
Kategorie
Durch Angabe des D-Typs als "Kategorie" bei der Pandas-Objekterstellung.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
Es ist output ist wie folgt -
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
Die Anzahl der an das Serienobjekt übergebenen Elemente beträgt vier, die Kategorien sind jedoch nur drei. Beachten Sie dies auch in den Ausgabekategorien.
pd.Categorical
Mit dem Standard-Pandas-Konstruktor "Kategorie" können wir ein Kategorieobjekt erstellen.
pandas.Categorical(values, categories, ordered)
Nehmen wir ein Beispiel -
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
Es ist output ist wie folgt -
[a, b, c, a, b, c]
Categories (3, object): [a, b, c]
Lassen Sie uns ein anderes Beispiel haben -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat
Es ist output ist wie folgt -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]
Hier bezeichnet das zweite Argument die Kategorien. Daher wird jeder Wert, der in den Kategorien nicht vorhanden ist, als behandeltNaN.
Schauen Sie sich nun das folgende Beispiel an:
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat
Es ist output ist wie folgt -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
Logischerweise bedeutet die Reihenfolge, dass a ist größer als b und b ist größer als c.
Beschreibung
Verwendung der .describe() Befehl für die kategorialen Daten erhalten wir eine ähnliche Ausgabe wie a Series oder DataFrame des type Zeichenfolge.
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()
Es ist output ist wie folgt -
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
Rufen Sie die Eigenschaften der Kategorie ab
obj.cat.categories Befehl wird verwendet, um die zu erhalten 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
Es ist output ist wie folgt -
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered Befehl wird verwendet, um die Reihenfolge des Objekts abzurufen.
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered
Es ist output ist wie folgt -
False
Die Funktion wurde zurückgegeben false weil wir keine Reihenfolge angegeben haben.
Kategorien umbenennen
Das Umbenennen von Kategorien erfolgt durch Zuweisen neuer Werte zu series.cat.categoriesseries.cat.categories-Eigenschaft.
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
Es ist output ist wie folgt -
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Anfangskategorien [a,b,c] werden von der aktualisiert s.cat.categories Eigentum des Objekts.
Neue Kategorien anhängen
Mit der Methode Categorical.add.categories () können neue Kategorien angehängt werden.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories
Es ist output ist wie folgt -
Index([u'a', u'b', u'c', 4], dtype='object')
Kategorien entfernen
Verwendung der Categorical.remove_categories() Methode können unerwünschte Kategorien entfernt werden.
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")
Es ist output ist wie folgt -
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]
Vergleich kategorialer Daten
Der Vergleich kategorialer Daten mit anderen Objekten ist in drei Fällen möglich:
Vergleichen der Gleichheit (== und! =) mit einem listenartigen Objekt (Liste, Serie, Array, ...) mit der gleichen Länge wie die kategorialen Daten.
Alle Vergleiche (== ,! =,>,> =, <und <=) von kategorialen Daten mit einer anderen kategorialen Reihe, wenn bestellt == True und die Kategorien sind gleich.
Alle Vergleiche kategorialer Daten mit einem Skalar.
Schauen Sie sich das folgende Beispiel an -
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
Es ist output ist wie folgt -
0 False
1 False
2 True
dtype: bool