Filtrer efficacement les DataFrames Pandas en fonction de plages de dates est une compétence cruciale en analyse de données. Pandas fournit plusieurs méthodes pour y parvenir, chacune ayant ses forces et ses faiblesses. Cet article explore quatre approches populaires, en comparant leur syntaxe, leur efficacité et leurs cas d’utilisation.
Table des matières
- Filtrage avec masquage booléen
- Utilisation de la méthode
.query()
- Utilisation de la méthode
.isin()
- Exploitation de la méthode
.between()
Filtrage avec masquage booléen
Le masquage booléen offre l’approche la plus fondamentale et la plus flexible. Il crée un tableau booléen (masque) qui filtre les lignes en fonction de conditions spécifiées. Cette méthode est hautement adaptable aux scénarios complexes.
import pandas as pd
data = {'Date': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Valeur': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
date_debut = pd.to_datetime('2023-11-01')
date_fin = pd.to_datetime('2024-01-01')
masque = (df['Date'] >= date_debut) & (df['Date'] <= date_fin)
df_filtre = df[masque] #Plus efficace que df.loc[masque]
print(df_filtre)
Utilisation de la méthode .query()
La méthode .query()
fournit une alternative plus lisible et concise pour le filtrage. Elle est particulièrement bénéfique pour les conditions complexes.
date_debut = '2023-11-01'
date_fin = '2024-01-01'
df_filtre = df.query('@date_debut <= Date <= @date_fin')
print(df_filtre)
Utilisation de la méthode .isin()
La méthode .isin()
est appropriée lorsque vous devez sélectionner des lignes en fonction d’une liste de dates spécifiques, plutôt qu’une plage continue. Elle est moins efficace pour les grandes plages continues.
dates_a_inclure = pd.to_datetime(['2023-11-15', '2023-12-01'])
df_filtre = df[df['Date'].isin(dates_a_inclure)]
print(df_filtre)
Exploitation de la méthode .between()
La méthode .between()
offre une approche simplifiée pour sélectionner les lignes dans une plage de dates continue. Elle est efficace et facile à lire.
date_debut = pd.to_datetime('2023-11-01')
date_fin = pd.to_datetime('2024-01-01')
df_filtre = df[df['Date'].between(date_debut, date_fin, inclusive='both')] #argument inclusive ajouté pour plus de clarté
print(df_filtre)
En résumé, Pandas offre diverses méthodes pour le filtrage basé sur les dates. Le choix optimal dépend de vos besoins spécifiques et de votre style de codage. Le masquage booléen offre une flexibilité maximale, .query()
améliore la lisibilité, et .between()
simplifie la sélection de plages continues. N’oubliez pas de vous assurer que votre colonne de date est de type datetime64
pour des performances optimales.