Tirer le meilleur de la bibliothèque Pandas à travers 3 astuces Pandas pas si courantes.
Si vous lisez cet article, vous devez déjà avoir entendu parler de Pandas ou l’avoir utilisé. Je vais donc sauter la partie où je vais vous dire à quel point Pandas est génial.
Dans cet article, nous allons passer en revue des exemples qui démontrent certaines des fonctionnalités de Pandas qui ne sont pas si couramment utilisées. Je ne les ai d’ailleurs pas rencontrées très souvent dans ma carrière Pandas mais elles ne sons pas inintéressantes (au contraire).
La meilleure façon d’apprendre Pandas, ou tout autre outil logiciel, est de s’exercer. C’est ce que nous allons faire.
La première étape consiste à créer un échantillon de DataFrame sur lequel travailler :
import numpy as np import pandas as pd df = pd.DataFrame({"date": pd.date_range(start="2022-03-01", periods=100, freq="D"), "class": ["A","B","C","D"] * 25, "amount": np.random.randint(10, 100, size=100)}) df.head()
Nous avons un DataFrame avec 3 colonnes et 100 lignes. La colonne « date » contient 100 dates consécutives (démarrant arbitrairement le 3 mais 2022), la colonne « class » contient 4 valeurs distinctes stockées avec le type de données objet, et la colonne « amount » contient des entiers aléatoires entre 10 et 100.
Explorons nos 3 astuces Pandas pas si courantes !
Liste de nos 3 astuces Pandas pas si courantes que vous devriez connaître
1. to_period
Nous utilisons les dates avec de nombreux intervalles ou périodes différents, comme le jour, la semaine, le mois, le trimestre, etc. La date à utiliser dépend de la tâche à accomplir. Par exemple, dans un tableau de bord des revenues ou recettes, nous pouvons vouloir afficher les recettes mensuelles ou trimestrielles.
Dans Pandas, les fonctions permettant de manipuler les dates sont disponibles sous l’accesseur dt. La fonction to_period permet de convertir une date en un intervalle spécifique. Les périodes que j’utilise fréquemment sont le mois et le trimestre.
La méthode month ne renvoie que le mois, ce qui n’est pas utile dans de nombreux cas, comme la déclaration de revenus historiques. Nous devons être en mesure de distinguer décembre 2020 et décembre 2021. Nous pouvons y parvenir en utilisant la période « M » avec la fonction to_period. De même, nous pouvons extraire les informations sur le trimestre avec « Q ».
Créons de nouvelles colonnes pour l’année-mois (month) et le trimestre (quarter) :
df["month"] = df["date"].dt.to_period("M") df["quarter"] = df["date"].dt.to_period("Q") df.head()
Vérifions également les différentes valeurs année-mois et trimestre dans notre DataFrame :
df["month"].value_counts()
2022-03 31 2022-05 31 2022-04 30 2022-06 8 Freq: M, Name: month, dtype: int64
df["quarter"].value_counts()
2022Q2 69 2022Q1 31 Freq: Q-DEC, Name: quarter, dtype: int64
2. cumsum et groupby
La fonction cumsum est une fonction Pandas très utile. Elle calcule la somme cumulée des valeurs d’une colonne.
Voici comment nous l’utilisons normalement :
df["cumulative_sum"] = df["amount"].cumsum() df.head()
Nous avons maintenant la somme cumulée (cumulative_sum) des valeurs de la colonne « amount » des montants. Cependant, elle ne prend pas en compte les catégories. Dans certains cas, nous devrons calculer la somme cumulée séparément pour les différentes catégories.
Heureusement, Pandas rend cette tâche très simple. Il suffit de regrouper les lignes par la colonne « class », puis d’appliquer la fonction cumsum.
df["class_cum_sum"] = df.groupby("class")["amount"].cumsum()
Confirmons les résultats sur la classe A :
df[df["class"]=="A"].head()
La colonne des sommes cumulées par classe contient les valeurs des sommes cumulées calculées séparément pour chaque classe.
3. Type de données Category
Nous devons souvent traiter des données catégorielles qui prennent un nombre limité (et généralement fixe) de valeurs possibles. Dans notre DataFrame, la colonne « class » est une variable catégorielle avec 4 valeurs distinctes : A, B, C, D.
Par défaut, le type de données de cette colonne devient « object ».
df.dtypes
date datetime64[ns] class object amount int64 month period[M] quarter period[Q-DEC] cumulative_sum int64 class_cum_sum int64
Pandas dispose également d’un type de données « category » qui consomme beaucoup moins de mémoire que le type de données « object ». Il est donc préférable d’utiliser le type de données « category » chaque fois que cela est possible.
Répliquons la colonne « class » mais avec le type de données « category ».
df["class_category"] = df["class"].astype("category") df.dtypes
date datetime64[ns] class object amount int64 month period[M] quarter period[Q-DEC] cumulative_sum int64 class_cum_sum int64 class_category category dtype: object
Nous pouvons maintenant comparer la consommation de mémoire des colonnes « class » et « class_category ».
df.memory_usage()
Index 128 date 800 class 800 amount 800 month 800 quarter 800 cumulative_sum 800 class_cum_sum 800 class_category 304 dtype: int64
La colonne « class_category » consomme moins de la moitié de la consommation mémoire de la colonne « class ». La différence est de 496 octets, ce qui est peu. Cependant, lorsque nous travaillons avec de grands ensembles de données, la différence est importante.
J’espère que ces 3 astuces Pandas pas si courantes et à connaître vous ont intéressées !
Si oui, vous prendrez plaisir à découvrir ces 3 fonctions NumPy qui facilitent vos analyses de données avec Pandas.