English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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).
Les objets de catégorie peuvent être créés de plusieurs manières. Leur description est décrite ci-dessous :
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.
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.
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
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.
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.
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')
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]
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>
Voyons l'exemple suivant : Résultat de l'exécution ci-dessous : 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