Panda Python - Dati categoriali

Spesso in tempo reale, i dati includono le colonne di testo, che sono ripetitive. Funzionalità come sesso, paese e codici sono sempre ripetitive. Questi sono gli esempi per i dati categoriali.

Le variabili categoriali possono assumere solo un numero limitato e solitamente fisso di valori possibili. Oltre alla lunghezza fissa, i dati categoriali potrebbero avere un ordine ma non possono eseguire operazioni numeriche. Le categorie sono un tipo di dati Panda.

Il tipo di dati categoriale è utile nei seguenti casi:

  • Una variabile stringa composta solo da pochi valori diversi. La conversione di una tale variabile di stringa in una variabile categoriale farà risparmiare un po 'di memoria.

  • L'ordine lessicale di una variabile non è lo stesso dell'ordine logico ("uno", "due", "tre"). Convertendo in un categoriale e specificando un ordine sulle categorie, l'ordinamento e min / max utilizzeranno l'ordine logico anziché l'ordine lessicale.

  • Come segnale ad altre librerie python che questa colonna dovrebbe essere trattata come una variabile categoriale (ad esempio per utilizzare metodi statistici o tipi di grafici adatti).

Creazione di oggetti

L'oggetto categoriale può essere creato in più modi. I diversi modi sono stati descritti di seguito:

categoria

Specificando il dtype come "categoria" nella creazione di oggetti panda.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

Suo output è il seguente -

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

Il numero di elementi passati all'oggetto serie è quattro, ma le categorie sono solo tre. Osserva lo stesso nelle categorie di output.

pd.Categorical

Utilizzando il costruttore categorico panda standard, possiamo creare un oggetto categoria.

pandas.Categorical(values, categories, ordered)

Facciamo un esempio:

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

Suo output è il seguente -

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

Facciamo un altro esempio:

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

Suo output è il seguente -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

Qui, il secondo argomento indica le categorie. Pertanto, qualsiasi valore che non è presente nelle categorie verrà trattato comeNaN.

Ora, dai un'occhiata al seguente esempio:

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

Suo output è il seguente -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

Logicamente, l'ordine significa che, a è più grande di b e b è più grande di c.

Descrizione

Usando il .describe() comando sui dati categoriali, otteniamo un output simile a un file Series o DataFrame del type corda.

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()

Suo output è il seguente -

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

Ottieni le proprietà della categoria

obj.cat.categories comando viene utilizzato per ottenere il file 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

Suo output è il seguente -

Index([u'b', u'a', u'c'], dtype='object')

obj.ordered comando viene utilizzato per ottenere l'ordine dell'oggetto.

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

Suo output è il seguente -

False

La funzione è stata restituita false perché non abbiamo specificato alcun ordine.

Rinominare le categorie

La ridenominazione delle categorie viene eseguita assegnando nuovi valori al file series.cat.categoriesproprietà series.cat.categories.

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

Suo output è il seguente -

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

Categorie iniziali [a,b,c] vengono aggiornati da s.cat.categories proprietà dell'oggetto.

Aggiunta di nuove categorie

Utilizzando il metodo Categorical.add.categories (), è possibile aggiungere nuove categorie.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

Suo output è il seguente -

Index([u'a', u'b', u'c', 4], dtype='object')

Rimozione di categorie

Usando il Categorical.remove_categories() metodo, le categorie indesiderate possono essere rimosse.

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")

Suo output è il seguente -

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]

Confronto di dati categoriali

Il confronto dei dati categoriali con altri oggetti è possibile in tre casi:

  • confrontando l'uguaglianza (== e! =) con un oggetto tipo lista (lista, serie, matrice, ...) della stessa lunghezza dei dati categoriali.

  • tutti i confronti (==,! =,>,> =, <e <=) di dati categoriali con un'altra Serie categoriale, se ordinati == True e le categorie sono le stesse.

  • tutti i confronti di un dato categoriale con uno scalare.

Dai un'occhiata al seguente esempio:

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

Suo output è il seguente -

0  False
1  False
2  True
dtype: bool