Comment réparer dans Pandas : horodatage en nanosecondes hors limites



Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2300-01-10 00:00:00

Cette erreur se produit lorsque vous tentez de créer un horodatage situé en dehors de la plage suivante :

import pandas as pd

#display minimum timestamp allowed
print(pd.Timestamp.min)

1677-09-21 00:12:43.145224193

#display maximum timestamp allowed 
print(pd.Timestamp.max)

2262-04-11 23:47:16.854775807

L’exemple suivant montre comment corriger cette erreur dans la pratique.

Comment reproduire l’erreur

Supposons que nous essayions de créer une plage de dates dans pandas contenant les trois dates suivantes :

  • 1/1/2020
  • 1/1/2150
  • 1/1/2300

Nous pouvons utiliser la fonction date_range() pour tenter de créer cette plage de dates :

import pandas as pd

#attempt to create date range
some_dates = pd.date_range(start='1/1/2000', end='1/1/2300', periods=3)

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2300-01-10 00:00:00

Nous recevons l’erreur OutOfBoundsDatetime car l’horodatage 1/1/2300 est supérieur à l’horodatage maximal en nanosecondes autorisé par les pandas.

Même si vous ne souhaitez pas stocker l’horodatage en utilisant les nanosecondes comme unité, les pandas le feront automatiquement.

Comment réparer l’erreur

Le moyen le plus simple de contourner cette erreur consiste à utiliser l’argument error = ‘coerce’ , qui contraint tous les horodatages en dehors de la plage minimale ou maximale aux valeurs NaT.

Par exemple, nous pouvons utiliser le code suivant pour créer une plage de dates et forcer automatiquement tous les horodatages en dehors de la plage autorisée aux valeurs NaT :

import pandas as pd

#create date range
some_dates = ['1/1/2000', '1/1/2150', '1/1/2300']

#convert date range to datetime and automatically coerce errors
some_dates = pd.to_datetime(some_dates, errors = 'coerce')

#show datetimes
print(some_dates)

DatetimeIndex(['2000-01-01', '2150-01-01', 'NaT'], dtype='datetime64[ns]', freq=None)

Le résultat est une plage de dates avec trois valeurs datetime et la dernière datetime est NaT car elle a dépassé la valeur maximale autorisée par les pandas.

Notez que nous ne recevons aucune erreur cette fois lors de la création de la plage de dates.

Ressources additionnelles

Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :

Comment réparer : les colonnes se chevauchent mais aucun suffixe n’est spécifié
Comment réparer : l’objet ‘numpy.ndarray’ n’a pas d’attribut ‘append’
Comment réparer : si vous utilisez toutes les valeurs scalaires, vous devez transmettre un index

Ajouter un commentaire

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