Pandas
Objectifs de la section
2-7 Bibliothèques du langage qui permettent de manipuler des fichiers structurés (CSV)
Temps requis
60 minutes
Pandas
est une bibliothèque qui permet la manipulation d'ensembles de données. Il définit des objets Python appelés Series
et DataFrame
pour contenir des données dans un format à deux dimensions (semblable à un tableau Excel). Bien qu'on puisse créer de toute pièce des Series
et des DataFrame
il est plus fréquent de les importer d'un fichier Excel ou CSV (comma separated value).
Avant de se lancer dans Pandas
, il est fortement suggéré de lire les deux pages suivantes :
Concepts de base de Pandas
Les Series
sont les objets de bases de Pandas
. Elles permettent de représenter une collection de données. Elles sont très semblables aux tableaux numpy
. Pandas
présente des tableaux avec un système d'indice de lignes et de colonnes. Les tableaux sont des objets DataFrame
. Chaque colonne est une Series
. Dans cette page nous verrons :
- L'importation de fichiers;
- Afficher la structure et le contenu d'un
DataFrame
; - Manipuler les données.
Pandas
propose beaucoup plus de fonctions que ce qui est décrit ici. N'hésitez pas à consulter la documentation officielle. Bien qu'elle ne soit disponible qu'en anglais, les intelligences artificielles peuvent vous aider à traduire.
Importer un fichier
Les DataFrame
sont importés d'un fichier. On peut importer un fichier dans plusieurs formats. Nous verrons comment traiter les deux les plus communs : les fichiers Excel et les fichiers CSV.
Excel
Pour importer un fichier Excel, il est nécessaire d'installer le paquet openpyxl
(voir installer un paquet avec pip ). Mais si vous utilisez Pandas
, celui-ci l'importe automatiquement lors de son utilisation. La fonction à utiliser est read_excel
qui, dans la documentation, a la signature suivante. La fonction retourne un DataFrame
avec le contenu du fichier Excel. En dessous sont présentés les principaux paramètres de la fonction.
pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, usecols=None, dtype=None,
engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None,
na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False,
date_parser=<no_default>, date_format=None, thousands=None, decimal='.', comment=None, skipfooter=0,
storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)
Paramètre | Valeur par défaut | Fonctionnement |
---|---|---|
io | Le chemin du fichier à charger. | |
sheet_name | 0 | L'indice de la feuille à charger (0 pour la première), le nom sous forme de chaîne de caractères ou une liste de feuilles à charger. |
header | 0 | L'indice de la ligne (0 pour la première) à utiliser. |
index_col | None | L'indice de la colonne à utiliser pour identifier les lignes. Si None , alors des indices à partir 0 sont utilisés pour numérotés les lignes. |
thousands | None | Le caractère de séparation des milliers. En anglais, on peut mettre des virgules entre chaque groupe de 3 chiffres. |
decimal | . | Le caractère de séparation des décimales pour les nombres à virgule. |
Données de consommation Hydro-Québec du 17 au 20 mars 2025.
HYDRO-QUÉBEC. (2022). Estimation des émissions directes de GES associées à l’électricité consommée au Québec [Jeu de données]. https://donnees.hydroquebec.com/explore/dataset/estimation-emissions-directes-ges/information/.
La méthode head
de DataFrame
permet de sélectionner les 5 premières lignes. C'est utile pour s'assurer que les données ont bien été importées.
import pandas as pd
donnees = pd.read_excel("estimation-emissions-directes-ges.xlsx")
print(donnees.head())
Emplacement du fichier
Un chemin relatif est utilisé dans l'exemple. Votre fichier Excel doit être enregistré au même endroit sur votre disque que le fichier de code Python.
CSV
Un fichier CSV est de format texte, donc lisible par un humain sans application particulière. Ce format est souvent utilisé pour le partage de données sur internet et par les équipments de laboratoire scientifiques. Il présente les données sous forme de grille avec un caractère particulier (souvent la virgule ou le point-virgule) pour séparer les colonnes.
On charge un fichier CSV avec la fonction read_csv
qui se comporte comme read_excel
à la différence d'un paramètre très important.
Le paramètre sep
permet de définir le caractère qui sépare les colonnes. Le format CSV standard (anglais) utilise la virgule pour séparer les colonnes et le point pour séparer les décimales. Dans le format français que l'on rencontre parfois, c'est le point-virgule qui sert à séparer les colonnes, la virgule servant à délimiter les nombres décimaux. Il peut être nécessaire d'ouvrir le fichier avec bloc-notes pour observer sa structure avant de l'importer en Python.
Obtenir des informations sur la structure d'un DataFrame
Plusieurs informations de la structure d'un DataFrame
peuvent être affichés avec des propriétés de celui-ci (on suppose ici que le DataFrame
est dans une variable appelée donnees
). Ces informations peuvent être utiles pour valider la bonne lecture des données ou pour permettre d'écrire des codes génériques.
Le nombre de colonnes
len(donnees.columns)
. Retourne le nombre de colonnes.Le nom des colonnes
donnees.columns.values
. Retourne un tableau qui contient le nom des colonnes.Les dimensions du tableau
donnees.shape
. Retourne un tuple avec le nombre de lignes à l'indice 0 et le nombre de colonnes à l'indice 1.Le nombre de données
donnees.size
. Retourne le nombre d'éléments dans le tableau. S'il n'y a pas d'élément manquant, cela correspond au nombre de lignes multiplé par le nombre de colonnes.
Afficher des données du DataFrame
Il y a deux façons d'accéder aux données d'un DataFrame
, soit par le nom des colonnes pour retourner une Series
, ou par le système d'indices.
Par le nom des colonnes
Pour sélectionner une colonne, on utilise l'opérateur [
]
avec le nom de la colonne comme chaîne de caractères. Par exemple, pour sélectionner que la colonne d'estimation de production de GES la ligne à utiliser est la suivante :
Sélectionner une colonne par son nom | |
---|---|
Par les indices
Pour sélectionner une donnée par les indices, on doit travailler avec la propriété iloc
et son opérateur [
]
. Il accepte deux paramètres, soit les indices des lignes à sélectionner et les indices des colonnes à sélectionner. Voici différents usages de la propriété iloc
.
# Sélectionner la donnée de la ligne 1, colonne 3
donnees.iloc[1, 3]
# Sélectionner toute la ligne 2
donnees.iloc[2, ]
# Sélectionner toute la colonne 3
donnees.iloc[:, 3]
On peut utiliser les opérateurs de découpage (slicing) pour sélectionner une plage de ligne ou de colonne.
Sélection des données par indice avec découpage | |
---|---|
Nettoyer les données
Lorsque l'on importe un jeu de données, il arrive que celui soit incomplet. Il génère des entrées de types « N/A » pour not available. Ces entrées peuvent poser problème lorsque l'on fait des traitements.
La fonction isna
permet de tester si une valeur est de type « N/A ». Elle retourne une dataframe avec un booléen indiquant si la valeur est nulle N/A ou non. On peut ensuite appeler la méthode any
pour vérifier si au moins un des booléens est vrai.
Pourquoi appeler any 2 fois ?
Parce que le premier appel retourne une Series
qui indique, pour chaque colonne, s'il y en a (True
ou False
). Cela peut être utile dans le cas où vous détectez des valeurs N/A afin de les localiser. Le deuxième appel vérifie si la Series
contient-elle même une valeur True
.
Une fois identifié, on peut les retirer des données avec la méthode dropna
. Cette méthode retourne un nouveau DataFrame
sans les lignes qui contiennent un ou plusieurs N/A.
Le parametre inplace
La plupart des méthodes qui modifient la structure d'un DataFrame
ou qui en retourne un nouveau accepte un paramètre nommé inplace
. Par défaut sa valeur est False
, mais lorsqu'on le met à True
, la méthode modifie le DataFrame
plutôt que d'en retourner une copie avec la modification.
Manipuler les données
Une fois les données importées, il faut opérer des traitements dessus. On présente trois types de traitement :
- Tri
- Opérations mathématiques
- Fonctions mathématiques
Trier les données
La méthode sort_values
permet de trier les données selon une colonne déterminée. La fonction retourne un DataFrame
trié ou tri directement dans le DataFrame
si le paramètre inplace
est True
.
Paramètre | Valeur par défaut | Fonctionnement |
---|---|---|
by | La ou les colonnes par lesquelles trier. On peut utiliser les indices ou les noms. | |
inplace | False |
Indique si le tri est fait dans une copie (par défaut) ou dans le présent DataFrame |
ascending | True |
Indique si en ordre croissant (par défaut) ou en ordre décroissant (False ) |
Trier un DataFrame | |
---|---|
Renuméroter les lignes
Le tri des données conserve les numéros de lignes (indices des lignes) initiaux. Les numéros d'identification ne sont donc plus séquentiels. Dans certains cas, on pourrait souhaiter les réinitialiser afin que l'utilisation de iloc
corresponde aux numéros des lignes. Pour ce faire, on utilise la méthode reset_index
avec le paramètre inplace
à True
.
Opérations mathématiques
On peut utiliser les opérations mathématiques entre les Series
, comme pour les tableaux numpy. Si on souhaite par exemple avoir le pourcentage de production de source hydraulique par rapport à la consommation totale, on peut simplement diviser les deux Series
entre elles.
Le résultat de l'opération sera une Series
avec le résultat de l'opération appliquée entre chaque paire d'éléments correspondants. Évidement, en cas de présence de N/A sur une ligne, cela empêche de calculer un résultat pour cette ligne.
Opérations mathématiques entre Series | |
---|---|
Fonctions mathématiques et statistiques
Au-delà des opérations mathématiques, Pandas
permet d'appliquer plusieurs fonctions mathématiques ou statistiques sur une Series
. En dessous du capot, Pandas
s'appuie sur numpy pour faire ces opérations.
Opération | Méthode | Effet |
---|---|---|
Somme | sum | Calcule la somme des éléments de la Series . |
Somme cumulative | cumsum | Calcule la somme cumulative des éléments de la Series . Retourne une série avec les sommes partielles. |
Maximum | max | Retourne le maximum de la Series . |
Index du maximum | idxmax | Retourne l'indice du maximum. |
Minimum | min | Retourne le minimum de la Series . |
Index du minimum | idxmin | Retourne l'indice du minimum. |
Moyenne | mean | La moyenne de la Series |
Écart-type | std | L'écart-type de la Series |
Médiane | median | La médiane de la Series |
Mode | mode | Retourne le ou les modes de la Series |
Corrélation | corr | Retourne le coefficient de corrélation de Pearson avec une autre Series passée en paramètres |
Compter les valeurs | value_counts | Compte le nombre d'occurrences de chaque valeur |
Valeur absolue | abs | Retourne une série avec les valeurs absolues de chacune des valeurs |
Toutes ces fonctions acceptent un paramètre qui leur permet d'ignorer les valeurs N/A, donc on peut les utiliser sans provoquer constamment d'erreur à cause des N/A. Également, elles ont un paramètre numeric_only
qui permet d'éviter les colonnes qui contiennent autre chose que des nombres.
Lorsqu'on les appelle sur des DataFrame
, elles font le calcul pour chaque Series
et retourne un DataFrame
d'une ligne avec le résultat (sauf pour cumsum
et abs
, car ces méthodes retournes des Series
).
Les tests logiques et la méthode apply
Des méthodes existent aussi pour faire des tests logiques sur chaque élément (>, <, == ...). La méthode apply
permet aussi d'appliquer n'importe quelle fonction sur les éléments d'une Series
, y compris des fonctions que vous définissez vous-même.
Enregistrer un fichier Excel
Après avoir modifié un dataframe ou d'avoir calculer des informations sur le fichier, il peut être intéressant de le sauvegarder. Pour ce faire, on utilise la méthode to_excel
de l'objet DataFrame
. Cette méthode accepte un paramètre : le chemin du fichier dans lequel enregistrer le DataFrame
. Il faut que le nom de fichier contienne l'extension xlsx pour s'assurer que le fichier soit reconnu par Excel.
Enregistrement d'un fichier | |
---|---|
Démonstration
- Sélectionner uniquement les données du 17 mars.
- Trouver le moment avec la plus grande consommation éolienne.
- Quel est le taux de production d'hydroélectricité (par rapport à la production électrique totale) au moment de la plus petite émission de GES ?
- Créer un dictionnaire avec le pourcentage moyen de consommation horaire pour chaque source de consommation électrique.
Exercices
Données annuelles de fréquentations des urgences du Québec 2021-2024.
MINISTÈRE DE LA SANTÉ ET DES SERVICES SOCIAUX. Fichier cumulatif des données des urgences, [Jeu de données], dans Données Québec, 2023, mis à jour le 16 mars 2025. https://www.donneesquebec.ca/recherche/dataset/fichier-cumulatif-des-donnees-des-urgences, (consulté le 19 mars 2025).