Pandas Python - Données catégoriques

Souvent en temps réel, les données incluent les colonnes de texte, qui sont répétitives. Les fonctionnalités telles que le sexe, le pays et les codes sont toujours répétitives. Voici les exemples de données catégorielles.

Les variables catégorielles ne peuvent prendre qu'un nombre limité et généralement fixe de valeurs possibles. Outre la longueur fixe, les données catégorielles peuvent avoir un ordre mais ne peuvent pas effectuer d'opérations numériques. Les catégories sont un type de données Pandas.

Le type de données catégorielles est utile dans les cas suivants -

  • Variable de chaîne composée de quelques valeurs différentes seulement. La conversion d'une telle variable chaîne en variable catégorielle économisera de la mémoire.

  • L'ordre lexical d'une variable n'est pas le même que l'ordre logique («un», «deux», «trois»). En convertissant en un catégoriel et en spécifiant un ordre sur les catégories, le tri et min / max utiliseront l'ordre logique au lieu de l'ordre lexical.

  • Pour signaler aux autres bibliothèques Python que cette colonne doit être traitée comme une variable catégorielle (par exemple pour utiliser des méthodes statistiques ou des types de tracé appropriés).

Création d'objets

Un objet catégoriel peut être créé de plusieurs manières. Les différentes manières ont été décrites ci-dessous -

Catégorie

En spécifiant le dtype comme "category" dans la création d'objets pandas.

import pandas as pd

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

Ses output est comme suit -

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

Le nombre d'éléments transmis à l'objet série est de quatre, mais les catégories ne sont que de trois. Observez la même chose dans les catégories de sortie.

pd.Catégorique

En utilisant le constructeur catégorique pandas standard, nous pouvons créer un objet de catégorie.

pandas.Categorical(values, categories, ordered)

Prenons un exemple -

import pandas as pd

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

Ses output est comme suit -

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

Prenons un autre exemple -

import pandas as pd

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

Ses output est comme suit -

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

Ici, le deuxième argument signifie les catégories. Ainsi, toute valeur qui n'est pas présente dans les catégories sera traitée commeNaN.

Maintenant, jetez un œil à l'exemple suivant -

import pandas as pd

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

Ses output est comme suit -

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

Logiquement, la commande signifie que, a est supérieur à b et b est supérieur à c.

La description

En utilisant le .describe() commande sur les données catégorielles, nous obtenons une sortie similaire à une Series ou DataFrame du type chaîne.

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

Ses output est comme suit -

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

Obtenez les propriétés de la catégorie

obj.cat.categories commande est utilisée pour obtenir le 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

Ses output est comme suit -

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

obj.ordered La commande est utilisée pour obtenir l'ordre de l'objet.

import pandas as pd
import numpy as np

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

Ses output est comme suit -

False

La fonction retournée false car nous n'avons spécifié aucune commande.

Renommer les catégories

Le changement de nom des catégories s'effectue en attribuant de nouvelles valeurs au series.cat.categoriespropriété 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

Ses output est comme suit -

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

Catégories initiales [a,b,c] sont mis à jour par le s.cat.categories propriété de l'objet.

Ajout de nouvelles catégories

En utilisant la méthode Categorical.add.categories (), de nouvelles catégories peuvent être ajoutées.

import pandas as pd

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

Ses output est comme suit -

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

Supprimer des catégories

En utilisant le Categorical.remove_categories() méthode, les catégories indésirables peuvent être supprimées.

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

Ses output est comme suit -

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]

Comparaison des données catégoriques

La comparaison des données catégorielles avec d'autres objets est possible dans trois cas -

  • comparer l'égalité (== et! =) à un objet de type liste (liste, série, tableau, ...) de même longueur que les données catégorielles.

  • toutes les comparaisons (==,! =,>,> =, <et <=) de données catégorielles à une autre série catégorielle, lorsqu'elles sont ordonnées == True et les catégories sont les mêmes.

  • toutes les comparaisons d'une donnée catégorielle à un scalaire.

Jetez un œil à l'exemple suivant -

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

Ses output est comme suit -

0  False
1  False
2  True
dtype: bool