English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Beispiel für Operationen mit kategorischen Daten von Pandas
Daten enthalten in der Regel in Echtzeit wiederholte Textspalten. Geschlecht, Land/Funktionen wie Region und Code sind stets wiederkehrend. Dies sind Beispiele für kategorische Daten.
Kategorische Variablen können nur begrenzte und in der Regel festgelegte mögliche Werte annehmen. Neben der festen Länge können kategorische Daten auch eine Ordnung haben, können aber keine numerischen Operationen durchführen. Kategorien sind ein Pandas-Datentyp.
Kategorische Datentypen sind in folgenden Fällen nützlich
Eine Zeichenfolgevariable, die nur wenige verschiedene Werte enthält. Die Konvertierung einer solchen Zeichenfolgevariable in eine kategorische Variable spart etwas Speicherplatz. Die Wörterbuchreihenfolge der Variablen ist von der logischen Reihenfolge ("eins", "zwei", "drei") unterschiedlich. Durch Konvertierung in eine Kategorie und Angabe der Reihenfolge auf der Kategorie können Sortierung und Minimum/Die größte wird den logischen instead des alphabetischen Reihenfolgen verwenden. Als Signal von anderen Python-Bibliotheken sollte diese Spalte als kategorische Variable betrachtet werden (z.B. mit geeigneten statistischen Methoden oder Darstellungstypen).
Kategorische Objekte können auf verschiedene Weisen erstellt werden. Nachfolgend werden verschiedene Methoden beschrieben:
Durch Angabe von dtype="category" beim Erstellen des Pandas-Objekts.
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") print(s)
Die Ergebnisse des Laufens sind wie folgt:
0 a 1 b 2 c 3 a dtype: category Categories (3, object): [a, b, c]
Die Anzahl der Elemente, die an das Series-Objekt übergeben werden, beträgt4, aber die Kategorien sind nur3. Beim Betrachten der Ausgabe der Kategorien beachten Sie das gleiche.
Mit dem Standard-Pandas-Kategorisierungskonstruktor können wir ein Kategoriekonto erstellen.
pandas.Categorical(values, categories, ordered)
Lassen Sie uns ein Beispiel betrachten-
import pandas as pd cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c']) print(cat)
Die Ergebnisse des Laufens sind wie folgt:
[a, b, c, a, b, c] Categories (3, object): [a, b, c]
Lassen Sie uns noch ein Beispiel betrachten
import pandas as pd cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c', 'd'], ['c', 'b', 'a']) print(cat)
Die Ergebnisse des Laufens sind wie folgt:
[a, b, c, a, b, c, NaN] Categories (3, object): [c, b, a]
Hierbei stellt der zweite Parameter die Kategorie dar. Daher wird jeder Wert, der in der Kategorie nicht vorhanden ist, als NaN betrachtet.
Nun schauen wir uns 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)
Die Ergebnisse des Laufens sind wie folgt:
[a, b, c, a, b, c, NaN] Categories (3, object): [c < b < a]
Logischerweise bedeutet diese Reihenfolge, dass a größer als b und b größer als c ist.
Mit dem Befehl .describe() für kategorische Daten erhalten wir ähnliche Ausgaben in einer Reihe oder Datenbox in Form eines Strings über den Typ.
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())
Die Ergebnisse des Laufens sind 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
Der Befehl obj.cat.categories wird verwendet, um die Kategorien des Objekts zu erhalten.
import pandas as pd import numpy as np s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"]) print(s.categories)
Die Ergebnisse des Laufens sind wie folgt:
Index([u'b', u'a', u'c'], dtype='object')
Der Befehl obj.ordered wird verwendet, um die Reihenfolge des Objekts zu erhalten.
import pandas as pd import numpy as np cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"]) print(cat.ordered)
Die Ergebnisse des Laufens sind wie folgt:
False
Die Funktion gibt false zurück, da wir keine Reihenfolge angegeben haben.
Die Umbenennung der Kategorien wird durch Zuweisung eines neuen Wertes an die Eigenschaft series.cat.categories series.cat.categories abgeschlossen.
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)
Die Ergebnisse des Laufens sind wie folgt:
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Die initialen Kategorien [a, b, c] werden durch das Attribut s.cat.categories des Objekts aktualisiert.
Mit dem Methode Categorical.add_categories() können neue Kategorien hinzugefügt werden.
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") s = s.cat.add_categories([4]) print(s.cat.categories)
Die Ergebnisse des Laufens sind wie folgt:
Index([u'a', u'b', u'c', 4], dtype='object')
Mit dem Methode Categorical.remove_categories() 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(("Nach der Entfernung:")) print(s.cat.remove_categories("a"))
Die Ergebnisse des Laufens sind wie folgt:
Ursprüngliches Objekt: 0 a 1 b 2 c 3 a dtype: category Categories (3, object): [a, b, c] Nach der Entfernung: 0 NaN 1 b 2 c 3 NaN dtype: category Categories (2, object): [b, c]
Kategorische Daten können in drei Fällen mit anderen Objekten verglichen werden:
Gleichheit (== und !=) mit Objekten verglichen, die Listen mit der gleichen Länge wie kategorische Daten haben (Liste, Sequenz, Array, ...). Wenn Sortierung== True und Kategorien gleich sind, werden kategorische Daten mit allen Vergleichen einer anderen Kategorieserie verglichen (==, !=, >, >=,
< und <=).< div>
Sehen Sie unten das Beispiel: Die Ergebnisse des Laufens sind wie folgt: 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)
0 False
1 False
2 True
dtype: bool