Pandas est une puissante librairie Python pour la manipulation et l’analyse de données. Une tâche courante consiste à sélectionner les lignes d’un DataFrame en fonction de conditions appliquées à des colonnes spécifiques. Cet article explore trois méthodes efficaces pour récupérer les indices des lignes répondant à un critère donné.
Table des matières
- Indexation booléenne : une approche simple et efficace
- Exploitation de
np.where()
de NumPy pour plus de flexibilité - Utilisation de
query()
de Pandas pour des requêtes complexes lisibles
Indexation booléenne : une approche simple et efficace
L’indexation booléenne offre une solution concise et efficace pour des critères de sélection simples. Elle exploite directement la valeur de vérité d’une condition pour filtrer les lignes.
Illustrons avec un exemple :
import pandas as pd
data = {'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
print(df)
# Obtenir les indices où 'col1' est supérieur à 2
indices = df[df['col1'] > 2].index.tolist()
print(indices) # Sortie : [2, 3, 4]
Ce code crée d’abord un masque booléen (df['col1'] > 2
), puis l’utilise pour filtrer le DataFrame, et enfin extrait les indices des lignes sélectionnées à l’aide de .index.tolist()
.
Exploitation de np.where()
de NumPy pour plus de flexibilité
La fonction np.where()
de NumPy offre une approche plus polyvalente, particulièrement avantageuse pour les conditions complexes ou les conditions multiples simultanées.
import numpy as np
indices = np.where(df['col1'] > 2)[0].tolist()
print(indices) # Sortie : [2, 3, 4]
np.where(df['col1'] > 2)
renvoie un tuple ; le premier élément contient un tableau d’indices satisfaisant la condition. Nous accédons à cet élément à l’aide de [0]
et le convertissons en liste à l’aide de .tolist()
.
Utilisation de query()
de Pandas pour des requêtes complexes lisibles
La méthode query()
améliore la lisibilité, notamment pour les conditions complexes. Elle permet de spécifier des critères à l’aide d’expressions de chaînes de caractères.
indices = df.query('col1 > 2').index.tolist()
print(indices) # Sortie : [2, 3, 4]
# Exemple avec plusieurs conditions
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices) # Sortie : [2]
La méthode query()
accepte directement une représentation sous forme de chaîne de caractères de la condition, ce qui améliore considérablement la lisibilité, notamment avec des conditions multiples ou complexes.
Conclusion : Chaque méthode récupère efficacement les indices en fonction d’une condition. L’indexation booléenne est la meilleure pour les conditions simples ; np.where()
gère les scénarios plus complexes ; et query()
excelle en lisibilité pour le filtrage avancé.