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

Ajouter un commentaire

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