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