Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Interroger un tableau de données (pandas)

Après cette leçon: Je peux charger un tableau de données et lui poser des questions.

Leçon de 55 min4 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Faut-il un vendeur de plus le samedi ?

Un loueur de vélos garde une ligne par jour de l’année 2025. La gérante se pose deux questions. Le week-end est-il vraiment plus chargé ? Combien de jours ont dépassé 400 locations ?

Faire défiler 365 lignes ne répond à aucune des deux. Quelques lignes de pandas y répondent en quelques secondes.

À la fin de cette leçon

Remarque

Je peux charger un tableau de données et lui poser des questions.

Mots clés

MotCe que ça veut direExemple
DataFrameun tableau de pandas aux colonnes nommées
Colonneun champ nommé, présent dans chaque lignelocations["rain_mm"]
Filtreun test qui ne garde que certaines ligneslocations["hires"] > 400
Regrouperséparer les lignes selon la valeur d’une colonnegroupby("weather")
Résumerremplacer beaucoup de valeurs par une seule
Médianela valeur du milieu, une fois les valeurs rangées
Modela valeur la plus fréquente

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Deux entrées dans le labo

Appuyez sur Démarrer dans la barre de la leçon et attendez que le labo tourne. Le terminal n’a pas de Python à lui. Chaque bouton Exécuter tape donc docker exec jupyter, qui lance une commande dans le conteneur du labo.

Ouvrez JupyterLab depuis la barre pour le carnet. Un bloc titré À taper dans votre carnet va dans une cellule. Il ne tourne pas sur cette page, dont le Python n’a pas pandas.

Un DataFrame est un tableau à colonnes nommées

pd.read_csv lit un fichier CSV et rend un DataFrame. Chaque colonne prend son nom dans la première ligne du fichier.

Ici, les noms sont en anglais : date, month, weekday, weather, temp_c, rain_mm et hires, le nombre de vélos loués. Les valeurs aussi : sunny pour le soleil, rainy pour la pluie, cloudy pour un ciel couvert.

Charger le fichier et voir le début

Commande
docker exec jupyter python3 steps/load.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À taper dans votre carnet : une colonne

Code: python
import pandas as pd

locations = pd.read_csv("hires.csv")
# La pluie la plus forte de l’année, en millimètres.
locations["rain_mm"].max()

Un filtre ne garde que certaines lignes

locations["hires"] > 400 pose une question à chaque ligne. La réponse est une colonne de True et de False.

Placée dans locations[...], cette réponse ne garde que les lignes True. Pour deux tests, écrivez & pour « et », | pour « ou », et mettez chaque test entre parenthèses.

Compter les jours très chargés

Commande
docker exec jupyter python3 steps/filter.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À taper dans votre carnet : deux tests

Code: python
# Les jours de pluie qui ont quand même dépassé 300 locations.
pluie_et_monde = locations[(locations["weather"] == "rainy") & (locations["hires"] >= 300)]
len(pluie_et_monde)

Une erreur fréquente

Attention

Beaucoup pensent que le and de Python relie deux tests dans pandas. C’est faux : and attend un seul True ou False, et un test sur une colonne en donne 365. pandas s’arrête alors sur « The truth value of a Series is ambiguous ». Écrivez &, avec des parenthèses autour de chaque test.

groupby sépare les lignes, puis résume

locations.groupby("weather")["hires"].mean() fait trois choses. Il sépare les lignes par météo. Il prend la colonne hires de chaque groupe. Il calcule la moyenne de chacun.

La moyenne se laisse tirer par quelques jours extrêmes. La médiane résiste mieux : regardez les deux. Le mode convient à une colonne de mots, comme la météo.

Exemple travaillé : un seul grand jour

JoursMoyenneMédianeMode
210, 185, 240, 185, 260, 230, 4951805 / 7 = 257,9230, la 4e des 7 valeurs rangées185, vu deux fois
Les mêmes sans 4951310 / 6 = 218,3(210 + 230) / 2 = 220185, vu deux fois

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Moyenne et médiane à la main

Code: python
# Une semaine de locations à une station.
jours = [210, 185, 240, 185, 260, 230, 495]

total = 0
for valeur in jours:
    total = total + valeur
print("moyenne :", round(total / len(jours), 1))

dans_l_ordre = sorted(jours)
milieu = len(dans_l_ordre) // 2
print("médiane :", dans_l_ordre[milieu])
# Retirez 495 de la liste, puis relancez.
# Lequel des deux nombres bouge le plus ?

Moyenne des locations par météo

Commande
docker exec jupyter python3 steps/weather.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Comparer week-end et semaine

Commande
docker exec jupyter python3 steps/weekend.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À taper dans votre carnet : la médiane

Code: python
# La médiane par météo, à comparer aux moyennes de weather.py.
locations.groupby("weather")["hires"].median()

Pour aller plus loin

Dans votre carnet, trouvez le mois le plus calme. Regroupez par month, prenez la moyenne de hires, puis rangez le résultat avec sort_values.

Posez ensuite votre propre question, avec un filtre et un regroupement. Par exemple : les jours de soleil seulement, le week-end reste-t-il plus chargé ? Notez votre prévision avant d’exécuter la cellule.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.