3 Astuces Pandas Pas Si Courantes

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()
3 astuces Pandas pas si courantes : DataFrame exemple

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()
3 astuces Pandas pas si courantes : astuce to_period

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()
3 astuces Pandas pas si courantes : astuce cumsum

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()
3 astuces Pandas pas si courantes : somme cumulative sur la classe A

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.

Publications similaires

0 Commentaires
Le plus récent
Le plus ancien Le plus populaire
Commentaires en ligne
Afficher tous les commentaires