English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Données catégorielles Pandas

Exemple d'opération de données catégorisées Pandas

Les données généralement en temps réel contiennent des colonnes de texte redondantes. Sexe, pays/Les fonctionnalités telles que les régions et les codes sont toujours redondantes. Voici des exemples de données catégorisées.
Les variables de catégorie ne peuvent prendre que des valeurs limitées et généralement fixes. En plus de la longueur fixe, les données de catégorie peuvent également avoir un ordre, mais ne peuvent pas effectuer des opérations numériques. La catégorie est un type de données Pandas.

Le type de données de catégorie est très utile dans les cas suivants

Une variable de chaîne contenant uniquement quelques valeurs différentes. La conversion d'une telle variable de chaîne en variable de catégorie économisera de la mémoire.

L'ordre lexical de la variable est différent de l'ordre logique ("un", "deux", "trois"). En le convertissant en catégorie et en spécifiant l'ordre dans la catégorie, le tri et le minimum/Le plus grand utilisera l'ordre logique plutôt que l'ordre lexical.

En tant que signal d'autres bibliothèques Python, cette colonne doit être considérée comme une variable de catégorie (par exemple, en utilisant des méthodes statistiques appropriées ou des types de graphique).

Création d'objet

Les objets de catégorie peuvent être créés de plusieurs manières. Leur description est décrite ci-dessous :

Catégorie

En spécifiant dtype "category" lors de la création de l'objet Pandas.

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

Résultat de l'exécution ci-dessous :

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

Le nombre d'éléments passés à l'objet série est4, mais la catégorie n'est que3. Surveillez la même catégorie dans la sortie.

pd.Categorical

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

pandas.Categorical(values, categories, ordered)

Regardons un exemple-

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

Résultat de l'exécution ci-dessous :

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

Laissons-nous regarder un autre exemple

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

Résultat de l'exécution ci-dessous :

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

Ici, le second paramètre représente la catégorie. Par conséquent, toute valeur absente dans la catégorie sera considérée comme NaN.
Maintenant, regardons 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)

Résultat de l'exécution ci-dessous :

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

Du point de vue logique, cette séquence signifie que a est supérieur à b et que b est supérieur à c.

Description

En utilisant la commande .describe() pour les données de classification, nous obtenons une sortie similaire sous forme de chaîne de caractères pour un type de série ou de tableau de données.

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

Résultat de l'exécution ci-dessous :

    cat s
count    3 3
unique   2 2
top c c
freq     2 2
count     3
unique    2
top c
freq      2
Nom: cat, dtype: object

Obtention des attributs de la catégorie

La commande obj.cat.categories est utilisée pour obtenir les catégories de l'objet.

 import pandas as pd
 import numpy as np
 s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
 print(s.categories)

Résultat de l'exécution ci-dessous :

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

La commande obj.ordered 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)

Résultat de l'exécution ci-dessous :

   False

La fonction retourne false car nous n'avons pas spécifié d'ordre.

Renommage des catégories

Le renommage des catégories est effectué en assignant une nouvelle valeur à l'attribut 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)

Résultat de l'exécution ci-dessous :

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

Les catégories initiales [a, b, c] sont mises à jour par l'attribut s.cat.categories de l'objet.

Ajout de nouvelles catégories

L'utilisation de la méthode Categorical.add_categories() permet d'ajouter de nouvelles catégories.

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

Résultat de l'exécution ci-dessous :

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

Suppression de catégories

L'utilisation de la méthode Categorical.remove_categories() permet de supprimer les catégories inutiles.

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(("Original object:"))
 print(s)
 print(("Après suppression :"))
 print(s.cat.remove_categories("a"))

Résultat de l'exécution ci-dessous :

 Objet original :
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categories (3, object): [a, b, c]
 Après suppression :
 0 NaN
 1 b
 2 c
 3 NaN
 dtype: category
 Categories (2, object): [b, c]

Comparaison de données catégorielles

Les données catégorielles peuvent être comparées avec d'autres objets dans trois cas :

Comparez égale (== et !=) avec des objets de liste similaires (liste, série, tableau, ...) de même longueur que les données catégorielles.

Lorsque le tri == True et que les catégories sont identiques, comparez les données catégorielles avec toutes les séries de catégories autres (==, !=, >, >=,  < et <=)。< div>    

Comparaison de données catégorielles avec des scalaires.

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

Résultat de l'exécution ci-dessous :

 0  False
 1  False
 2  True
 dtype: bool