Introduction
En analyse de données, il est souvent nécessaire de filtrer les données en fonction d'une plage de dates spécifique. Par exemple, si nous voulons analyser les chiffres de vente de janvier à mars d'une année particulière, nous devons extraire uniquement les données qui se situent dans cette période. C'est là que le concept de vérification si une date se trouve entre deux autres dates devient utile.
Dans ce tutoriel, nous aborderons comment vérifier si une date donnée se situe entre deux autres dates en Python.
Vérifier si une date se situe entre deux dates en utilisant le module datetime.
Une façon de vérifier si une date se trouve dans une plage donnée en Python est d'utiliser le module datetime.
En utilisant le module datetime, vous avez la possibilité de créer différents objets tels qu'un objet date (basé sur l'année, le mois et le jour) ou un objet datetime (basé sur l'année, le mois, le jour, l'heure et la minute).
En utilisant le constructeur datetime.date()
Ce module fournit un objet de date qui représente une date et permet d'effectuer divers calculs dessus.
Pour commencer, vous devrez importer le module datetime :
import datetime
Ensuite, créez deux objets de date en utilisant le constructeur datetime.date(). À titre d'illustration, considérons deux instances de date : l'une représentant le 3 août 2019 et l'autre représentant le 9 août 2019 :
start_date = datetime.date(2019, 8, 3)
end_date = datetime.date(2019, 8, 9)
Prenons en compte la date donnée:
current_date = datetime.date(2019, 8, 5)
Pour déterminer s'il se situe entre la date de début et la date de fin, nous pouvons facilement utiliser les opérateurs Python ">" et "<":
start_date < current_date < end_date
Cela sera affiché ici.
True
Une autre façon d'exprimer la condition mentionnée précédemment est d'incorporer l'opérateur "&" :
(current_date > start_date) & (current_date < end_date)
Cela produira
True
Évaluons notre code en le testant avec une date qui se situe en dehors de la plage spécifiée.
current_date = datetime.date(2019, 7, 5)
start_date < current_date < end_date
Cela produira une sortie
False
En utilisant le constructeur datetime.datetime()
Maintenant, explorons un autre exemple qui implique deux objets datetime. La différence clé par rapport à l'exemple précédent est qu'un objet datetime inclut à la fois les heures et les minutes. En tenant compte de ce niveau de détail supplémentaire, nous pouvons améliorer davantage notre compréhension et notre utilisation des objets datetime.
import datetime
Maintenant, créons nos deux dates en tant qu'objets datetime :
start_date = datetime.datetime(2019, 8, 3, 15, 30)
end_date = datetime.datetime(2019, 8, 9, 20, 42)
Ces deux dates représentent le 3 août 2019 à 15h30 et le 9 août 2019 à 20h42.
Si nous prenons en compte la date et l'heure fournies
current_date = datetime.datetime(2019, 8, 5, 0, 0)
et vérifier s'il se situe dans la plage des deux dates précédentes
start_date < current_date < end_date
cela va donner
True
Cependant
current_date = datetime.datetime(2019, 8, 3, 12, 30)
start_date < current_date < end_date
va produire
False
Utiliser Numpy pour comparer des dates
Une autre approche intéressante pour déterminer si une date se situe dans une plage spécifique consiste à utiliser numpy.
Développement d'une fonction qui opère sur les éléments d'une matrice
Par exemple, numpy nous permet de définir deux dates :
import numpy as np
start_date = np.datetime64("2019-08-03")
end_date = np.datetime64("2019-08-09")
Si nous prenons en compte la date et l'heure fournies
current_date = np.datetime64("2019-08-05")
et vérifiez si elle se situe entre la date de début et la date de fin:
start_date < current_date < end_date
il produira
True
Un des avantages est la possibilité de définir un tableau avec plusieurs dates.
dates = np.array(['2019-07-23', '2019-08-05', '2019-08-29'], dtype='datetime64[D]')
De plus, en développant une fonction qui opère élément par élément.
def check_date_func(start_date,end_date, dates):
return start_date < dates < end_date
et ensuite en la vectorisant:
check_date_func_vectorized = np.vectorize(check_date_func)
Maintenant, nous pouvons utiliser un tableau de dates.
check_date_func_vectorized(start_date,end_date, dates)
ce qui va donner
array([False, True, False])
En utilisant numpy.logical_and()
Numpy nous fournit une fonction utile appelée numpy.logical_and(), qui nous permet d'effectuer une comparaison élément par élément entre deux tableaux ou matrices. Par exemple avec
import numpy as np
start_date = np.datetime64("2019-08-03")
end_date = np.datetime64("2019-08-09")
dates = np.array(['2019-07-23', '2019-08-05', '2019-08-29'], dtype='datetime64[D]')
Si nous voulons vérifier si les dates tombent entre la date de début et la date de fin, nous pouvons faire :
np.logical_and(dates > start_date, dates < end_date)
Le résultat de la fonction logical_and sera une valeur booléenne, que nous pourrons utiliser pour filtrer nos données en conséquence. Si le résultat est True
, alors la date se situe dans la plage donnée.
Cela sera affiché ici :
array([False, True, False])
Références
Liens | Site |
---|---|
datetime | docs.python.org |
operator | docs.python.org |
arrays.datetime | numpy.org |
logical_and | numpy.org |