Data Analysis

Maîtriser le filtrage par date dans les DataFrames Pandas

Spread the love

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

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *