Bonjour ! Dans notre dernière leçon, vous avez appris à sélectionner des données dans un DataFrame en utilisant leur position (.iloc) et leur étiquette (.loc). Ces outils sont essentiels pour naviguer dans vos données. Aujourd'hui, nous allons aller plus loin en apprenant à sélectionner des données non pas par leur emplacement, mais par leur valeur.
L'objectif de cette leçon est de vous apprendre à filtrer un DataFrame en fonction de conditions spécifiques (par exemple, "toutes les voitures avec une consommation supérieure à une certaine valeur") et à trier les résultats pour mieux les analyser. Ces deux compétences, le filtrage et le tri, constituent le cœur de l'exploration de données et sont des opérations que vous utiliserez constamment dans vos projets de machine learning.
1. Filtrer les données avec des conditions booléennes
Dans la leçon précédente, nous nous sommes arrêtés sur une question : comment sélectionner "tous les étudiants qui ont eu plus de 15 en Maths" ? La réponse réside dans le filtrage booléen.
L'idée est simple :
- Vous écrivez une condition qui s'applique à une colonne du DataFrame. Par exemple,
df['Maths'] > 15. - Pandas évalue cette condition pour chaque ligne et retourne une
Seriescontenant des valeursTrue(si la condition est remplie) ouFalse(sinon). On appelle cela un masque booléen. - Vous utilisez ce masque pour indexer le DataFrame, ce qui ne conservera que les lignes où la valeur est
True.
Reprenons notre DataFrame df_notes de la leçon précédente :
import pandas as pd
data = {'Maths': [15, 12, 18, 9],
'Physique': [13, 16, 17, 11],
'Chimie': [11, 14, 15, 12]}
index_labels = ['Ahmed', 'Fatima', 'Youssef', 'Aisha']
df_notes = pd.DataFrame(data, index=index_labels)
Pour sélectionner les étudiants avec une note en Maths supérieure à 14, nous faisons :
# 1. Créer le masque booléen
masque = df_notes['Maths'] > 14
print(masque)
Résultat :
Ahmed True
Fatima False
Youssef True
Aisha False
Name: Maths, dtype: bool
Maintenant, appliquons ce masque à notre DataFrame :
# 2. Appliquer le masque pour filtrer
etudiants_filtres = df_notes[masque]
print(etudiants_filtres)
Résultat :
Maths Physique Chimie
Ahmed 15 13 11
Youssef 18 17 15
On peut bien sûr combiner ces deux étapes en une seule ligne, ce qui est la pratique courante :
print(df_notes[df_notes['Maths'] > 14])
La vidéo suivante, de la chaîne "Alex The Analyst", montre de manière très claire comment appliquer ces filtres simples et d'autres plus complexes.
Filtering Columns and Rows in Pandas | Python Pandas Tutorials
Cette vidéo est une excellente introduction pratique au filtrage. L'instructeur est très direct et les exemples sont faciles à suivre.
Regardez ces trois passages pour maîtriser les techniques de base : Filtrage avec des opérateurs de comparaison : Observez comment il utilise < et <= pour filtrer des données numériques dans cette section. Filtrage avec .isin() : Apprenez à filtrer des lignes dont la valeur d'une colonne appartient à une liste prédéfinie ici. C'est l'équivalent de la clause IN en SQL. Filtrage avec .str.contains() : Découvrez comment filtrer des données textuelles en cherchant une sous-chaîne dans cette partie, ce qui est très utile pour les données non structurées.
Combinaison de plusieurs conditions
La véritable puissance du filtrage se révèle lorsque vous combinez plusieurs conditions. Pour cela, on utilise les opérateurs & (ET logique) et | (OU logique).
Attention : En raison des règles de précédence des opérateurs en Python, chaque condition doit être entourée de parenthèses.
Par exemple, pour trouver les étudiants qui ont plus de 15 en Maths ET plus de 16 en Physique :
df_notes[(df_notes['Maths'] > 15) & (df_notes['Physique'] > 16)]
Résultat :
Maths Physique Chimie
Youssef 18 17 15
Pour trouver les étudiants qui ont moins de 10 en Maths OU plus de 15 en Physique :
df_notes[(df_notes['Maths'] < 10) | (df_notes['Physique'] > 15)]
Résultat :
Maths Physique Chimie
Fatima 12 16 14
Youssef 18 17 15
Aisha 9 11 12
L'image ci-dessous illustre parfaitement un filtrage avec plusieurs conditions &.

2. Trier un DataFrame
Après avoir filtré les données qui nous intéressent, l'étape suivante consiste souvent à les trier pour identifier les extrêmes (les plus grandes ou les plus petites valeurs) ou simplement pour organiser l'affichage. La méthode principale pour cela est .sort_values().
Trier par une seule colonne
Pour trier un DataFrame, vous devez spécifier la colonne qui servira de clé de tri avec le paramètre by. Par défaut, le tri est ascendant (du plus petit au plus grand).
# Trier les notes par ordre croissant de la note de Physique
df_notes.sort_values(by='Physique')
Résultat :
Maths Physique Chimie
Aisha 9 11 12
Ahmed 15 13 11
Fatima 12 16 14
Youssef 18 17 15
Pour un tri descendant (du plus grand au plus petit), il suffit d'ajouter ascending=False.
# Trier les notes par ordre décroissant de la note de Physique
df_notes.sort_values(by='Physique', ascending=False)
Résultat :
Maths Physique Chimie
Youssef 18 17 15
Fatima 12 16 14
Ahmed 15 13 11
Aisha 9 11 12
Trier par plusieurs colonnes
Il est souvent utile de trier selon plusieurs critères. Par exemple, trier par note de Physique, et en cas d'égalité, trier par note de Maths. Pour cela, on passe une liste de noms de colonnes au paramètre by. L'ordre dans la liste définit la priorité du tri.
# Créons un nouveau DataFrame avec des égalités pour l'exemple
data2 = {'Matiere': ['Physique', 'Maths', 'Physique'],
'Note': [15, 18, 15],
'Coefficient': [3, 5, 4]}
df_examens = pd.DataFrame(data2)
# Trier d'abord par 'Note' (descendant), puis par 'Coefficient' (ascendant)
df_examens.sort_values(by=['Note', 'Coefficient'], ascending=[False, True])
Ici, nous passons une liste au paramètre ascending : False s'applique à 'Note' et True s'applique à 'Coefficient'.
Résultat :
Matiere Note Coefficient
1 Maths 18 5
0 Physique 15 3 # Note 15, Coeff 3
2 Physique 15 4 # Note 15, Coeff 4
Remarquez que pour la Note de 15, les lignes ont été ensuite triées par Coefficient croissant.
La section sur le tri dans la vidéo d'Alex The Analyst démontre ces concepts de manière très visuelle.
Filtering Columns and Rows in Pandas | Python Pandas Tutorials
Cette partie de la vidéo est un excellent complément visuel à la lecture.
Regardez attentivement la section sur le tri. L'instructeur montre comment : Trier par une seule colonne (.sort_values(by='column')). Changer l'ordre avec ascending=False. Trier par plusieurs colonnes en passant une liste. Spécifier des ordres de tri différents pour chaque colonne.
Pour une analyse plus approfondie et des exemples supplémentaires, l'article de Real Python est une référence de premier ordre.
pandas Sort: Your Guide to Sorting Data in Python
Cet article couvre en détail toutes les facettes de la fonction .sort_values(). Il vous servira de référence solide.
Concentrez-vous sur deux sections principales : "Sorting Your DataFrame on a Single Column" : Cette partie revient sur le tri simple et le tri descendant. "Sorting Your DataFrame on Multiple Columns" : Lisez attentivement cette section qui explique comment trier par plusieurs colonnes et, surtout, comment appliquer des ordres de tri différents à chaque colonne, ce qui est une technique très puissante.
Note importante : Par défaut, les méthodes comme .sort_values() retournent une nouvelle copie du DataFrame trié, sans modifier l'original. C'est une bonne pratique car elle préserve vos données initiales. Si vous voulez modifier le DataFrame original "sur place", vous pouvez ajouter le paramètre inplace=True, mais utilisez-le avec prudence, surtout en tant que débutant.
Exercice pratique
Mettons en pratique ces deux compétences. Imaginez que vous analysez les données de performance de plusieurs voitures.
import pandas as pd
# Création du DataFrame de voitures
data_voitures = {
'Marque': ['Toyota', 'Honda', 'Ford', 'Toyota', 'Ford', 'Honda'],
'Modele': ['Camry', 'Civic', 'Mustang', 'Corolla', 'Fiesta', 'Accord'],
'Annee': [2020, 2021, 2022, 2021, 2020, 2022],
'Consommation': [7.8, 6.5, 12.5, 6.8, 5.5, 7.2], # en L/100km
'Puissance': [203, 158, 450, 139, 95, 192] # en ch
}
df_voitures = pd.DataFrame(data_voitures)
Vos tâches :
- Filtrez le DataFrame pour n'afficher que les voitures fabriquées après 2020.
- Filtrez pour trouver les voitures Ford avec une puissance supérieure à 100 ch.
- Triez l'ensemble du DataFrame par consommation, de la plus basse à la plus élevée.
- Filtrez les voitures avec une consommation inférieure à 8 L/100km, puis triez le résultat par puissance, de la plus élevée à la plus basse.
Solutions
# 1. Voitures fabriquées après 2020
print("1. Voitures après 2020:")
print(df_voitures[df_voitures['Annee'] > 2020])
print("\n" + "="*40 + "\n")
# 2. Voitures Ford puissantes
condition_marque = df_voitures['Marque'] == 'Ford'
condition_puissance = df_voitures['Puissance'] > 100
print("2. Ford de plus de 100 ch:")
print(df_voitures[condition_marque & condition_puissance])
print("\n" + "="*40 + "\n")
# 3. Trier par consommation
print("3. Tri par consommation (ascendant):")
print(df_voitures.sort_values(by='Consommation'))
print("\n" + "="*40 + "\n")
# 4. Filtrer puis trier
print("4. Voitures sobres triées par puissance (descendant):")
voitures_sobres = df_voitures[df_voitures['Consommation'] < 8.0]
print(voitures_sobres.sort_values(by='Puissance', ascending=False))
Résultat attendu :
1. Voitures après 2020:
Marque Modele Annee Consommation Puissance
1 Honda Civic 2021 6.5 158
2 Ford Mustang 2022 12.5 450
3 Toyota Corolla 2021 6.8 139
5 Honda Accord 2022 7.2 192
========================================
2. Ford de plus de 100 ch:
Marque Modele Annee Consommation Puissance
2 Ford Mustang 2022 12.5 450
========================================
3. Tri par consommation (ascendant):
Marque Modele Annee Consommation Puissance
4 Ford Fiesta 2020 5.5 95
1 Honda Civic 2021 6.5 158
3 Toyota Corolla 2021 6.8 139
5 Honda Accord 2022 7.2 192
0 Toyota Camry 2020 7.8 203
2 Ford Mustang 2022 12.5 450
========================================
4. Voitures sobres triées par puissance (descendant):
Marque Modele Annee Consommation Puissance
0 Toyota Camry 2020 7.8 203
5 Honda Accord 2022 7.2 192
1 Honda Civic 2021 6.5 158
3 Toyota Corolla 2021 6.8 139
4 Ford Fiesta 2020 5.5 95
Conclusion
Félicitations ! Vous maîtrisez maintenant deux des opérations les plus fondamentales de Pandas. Savoir filtrer et trier efficacement vos données est la première étape de toute analyse sérieuse.
Les points clés à retenir :
- Le filtrage booléen (
df[condition]) permet de sélectionner des lignes en fonction de leurs valeurs. - Combinez les conditions avec
&(ET) et|(OU), en n'oubliant pas les parenthèses autour de chaque condition. - Utilisez
.sort_values()pour trier les données, en spécifiant la ou les colonnes avecbyet l'ordre avecascending.
En explorant et en nettoyant des jeux de données réels, vous rencontrerez inévitablement des valeurs manquantes (NaN). Comment les détecter ? Faut-il les supprimer ou les remplacer ? C'est une étape cruciale du prétraitement des données, et ce sera précisément le sujet de notre prochaine leçon.