Pandas : comment calculer une différence entre deux dates
Vous pouvez utiliser la syntaxe suivante pour calculer une différence entre deux dates dans un DataFrame pandas :
df['diff_days'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'D')
Cet exemple particulier calcule la différence entre les dates dans les colonnes end_date et start_date en termes de jours.
Notez que nous pouvons remplacer le « D » dans la fonction timedelta64() par les valeurs suivantes pour calculer la différence de date dans différentes unités :
- W : Semaines
- M : Mois
- Y : Années
Les exemples suivants montrent comment calculer une différence de date dans un DataFrame pandas en pratique.
Exemple 1 : calculer la différence entre deux dates avec des colonnes Datetime
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'start_date': pd.date_range(start='1/5/2020', periods=6, freq='W'), 'end_date': pd.date_range(start='6/1/2020', periods=6, freq='M')}) #view DataFrame print(df) start_date end_date 0 2020-01-05 2020-06-30 1 2020-01-12 2020-07-31 2 2020-01-19 2020-08-31 3 2020-01-26 2020-09-30 4 2020-02-02 2020-10-31 5 2020-02-09 2020-11-30 #view dtype of each column in DataFrame df.dtypes start_date datetime64[ns] end_date datetime64[ns] dtype: object
Étant donné que les deux colonnes du DataFrame ont déjà un type de datetime64 , nous pouvons utiliser la syntaxe suivante pour calculer la différence entre les dates de début et de fin :
import numpy as np
#create new columns that contains date differences
df['diff_days'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'D')
df['diff_weeks'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'W')
df['diff_months'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'M')
df['diff_years'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'Y')
#view updated DataFrame
print(df)
start_date end_date diff_days diff_weeks diff_months diff_years
0 2020-01-05 2020-06-30 177.0 25.285714 5.815314 0.484610
1 2020-01-12 2020-07-31 201.0 28.714286 6.603832 0.550319
2 2020-01-19 2020-08-31 225.0 32.142857 7.392349 0.616029
3 2020-01-26 2020-09-30 248.0 35.428571 8.148011 0.679001
4 2020-02-02 2020-10-31 272.0 38.857143 8.936528 0.744711
5 2020-02-09 2020-11-30 295.0 42.142857 9.692191 0.807683
Les nouvelles colonnes contiennent les différences de date entre les dates de début et de fin en termes de jours, semaines, mois et années.
Exemple 2 : calculer la différence entre deux dates avec des colonnes de chaîne
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'start_date': ['2020-01-05', '2020-01-12', '2020-01-19'], 'end_date': ['2020-06-30', '2020-07-31', '2020-08-31']}) #view dtype of each column print(df.dtypes) start_date object end_date object dtype: object
Puisqu’aucune des deux colonnes du DataFrame n’a de type datetime64 , nous recevrons une erreur si nous essayons de calculer la différence entre les dates :
import numpy as np
#attempt to calculate date difference
df['diff_days'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'D')
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Il faut d’abord utiliser pd.to_datetime pour convertir chaque colonne au format datetime avant de calculer la différence entre les dates :
import numpy as np
#convert columns to datetime
df[['start_date','end_date']] = df[['start_date','end_date']].apply(pd.to_datetime)
#calculate difference between dates
df['diff_days'] = (df['end_date'] - df['start_date']) / np.timedelta64(1, 'D')
#view updated DataFrame
print(df)
start_date end_date diff_days
0 2020-01-05 2020-06-30 177.0
1 2020-01-12 2020-07-31 201.0
2 2020-01-19 2020-08-31 225.0
Depuis que nous avons d’abord converti chaque colonne au format datetime, nous avons pu calculer avec succès la différence entre les dates sans aucune erreur.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :
Comment créer une plage de dates dans Pandas
Comment extraire le mois de la date dans Pandas
Comment convertir l’horodatage en date/heure dans Pandas