English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Esempi di operazioni sui dati categorici di Pandas
I dati di solito contengono colonne di testo ripetuti in tempo reale. Genere, regione/nazione e codici funzionali sono sempre ripetuti. Questi sono esempi di dati categorici.
Le variabili categoriche possono assumere solo un numero limitato e spesso fisso di valori possibili. Oltre alla lunghezza fissa, i dati categorici possono avere un ordine, ma non possono essere utilizzati per operazioni numeriche. La categorizzazione è un tipo di dati Pandas.
I dati categorici sono molto utili in alcune circostanze
Una variabile stringa che contiene solo pochi valori diversi. Convertire una variabile stringa del genere in una variabile categorica può risparmiare alcune risorse di memoria. L'ordine lessicografico delle variabili non corrisponde all'ordine logico (ad esempio, 'un', 'due', 'tre'). Convertendo in categorie e specificando l'ordine in queste, l'ordinamento e il min/max utilizzeranno l'ordine logico anziché lessicografico. Come segnale di altre librerie Python, questa colonna dovrebbe essere considerata come variabile categorica (ad esempio, utilizzando metodi statistici appropriati o tipi di grafici).
Gli oggetti di categoria possono essere creati in vari modi. Di seguito sono descritte le diverse modalità:
Specificando il dtype come "category" durante la creazione dell'oggetto panda.
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") print(s)
I risultati dell'esecuzione sono come segue:
0 a 1 b 2 c 3 a dtype: category Categories (3, object): [a, b, c]
Il numero di elementi passati all'oggetto series è 4, ma la categoria è solo 3. Osserva lo stesso nelle uscite delle categorie.
Utilizzando il costruttore standard di pandas per le categorie, possiamo creare un oggetto di categoria.
pandas.Categorical(values, categories, ordered)
Guardiamo un esempio -
import pandas as pd cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c']) print(cat)
I risultati dell'esecuzione sono come segue:
[a, b, c, a, b, c] Categories (3, object): [a, b, c]
Guardiamo un altro esempio
import pandas as pd cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a']) print(cat)
I risultati dell'esecuzione sono come segue:
[a, b, c, a, b, c, NaN] Categorie (3, oggetto): [c, b, a]
In questo caso, il secondo parametro rappresenta la categoria. Pertanto, qualsiasi valore non esistente nella categoria verrà considerato come NaN.
Ora, guardiamo l'esempio seguente:
import pandas as pd cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'], ordered=True) print(cat)
I risultati dell'esecuzione sono come segue:
[a, b, c, a, b, c, NaN] Categorie (3, oggetto): [c < b < a]
Logicamente, quest'ordine significa che a è maggiore di b e b è maggiore di c.
Utilizzando il comando .describe() per i dati categorici, otteniamo un output simile in una serie o DataFrame di tipo stringa.
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())
I risultati dell'esecuzione sono come segue:
cat s count 3 3 unique 2 2 top c c freq 2 2 count 3 unique 2 top c freq 2 Nome: cat, dtype: object
Il comando obj.cat.categories viene utilizzato per ottenere le categorie dell'oggetto.
import pandas as pd import numpy as np s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"]) print(s.categories)
I risultati dell'esecuzione sono come segue:
Index([u'b', u'a', u'c'], dtype='object')
Il comando obj.ordered 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)
I risultati dell'esecuzione sono come segue:
False
La funzione restituisce false perché non abbiamo specificato alcun ordine.
La rinomina delle categorie viene completata assegnando un nuovo valore all'attributo s.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)
I risultati dell'esecuzione sono come segue:
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
Le categorie iniziali [a, b, c] vengono aggiornate dall'attributo s.cat.categories.
È possibile aggiungere nuove categorie utilizzando il metodo Categorical.add_categories().
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") s = s.cat.add_categories([4]) print(s.cat.categories)
I risultati dell'esecuzione sono come segue:
Index([u'a', u'b', u'c', 4], dtype='object')
È possibile eliminare le categorie non necessarie utilizzando il metodo Categorical.remove_categories().
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") print(("Oggetto originale:")) print(s) print(("Dopo rimozione:")) print(s.cat.remove_categories("a"))
I risultati dell'esecuzione sono come segue:
Oggetto originale: 0 a 1 b 2 c 3 a dtype: category Categories (3, object): [a, b, c] Dopo la rimozione: 0 NaN 1 b 2 c 3 NaN dtype: category Categories (2, object): [b, c]
In tre casi è possibile confrontare i dati categorici con altri oggetti:
Confronta uguale (== e !=) con oggetti simili a liste di lunghezza uguale ai dati categorici (lista, serie, array, ...). Quando l'ordinamento è == True e le categorie sono le stesse, confronta i dati categorici con tutti i confronti di un'altra serie di categorie (==, !=, >, >=,
< e <=)。< div>
Vediamo l'esempio seguente: I risultati dell'esecuzione sono come segue: 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