Come risolvere il problema in panda: timestamp in nanosecondi fuori intervallo


Un errore che potresti riscontrare quando usi i panda è:

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

Questo errore si verifica quando tenti di creare un timestamp non compreso nell’intervallo seguente:

 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’esempio seguente mostra come correggere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di provare a creare un intervallo di date in panda contenente le seguenti tre date:

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

Possiamo utilizzare la funzione date_range() per tentare di creare questo intervallo di date:

 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

Stiamo ricevendo l’errore OutOfBoundsDatetime perché il timestamp 1/1/2300 è maggiore del timestamp massimo in nanosecondi consentito dai panda.

Anche se non desideri memorizzare il timestamp utilizzando i nanosecondi come unità, i panda lo faranno automaticamente.

Come correggere l’errore

Il modo più semplice per aggirare questo errore è utilizzare l’argomento error = ‘coerce’ , che forza tutti i timestamp esterni all’intervallo minimo o massimo ai valori NaT.

Ad esempio, possiamo utilizzare il codice seguente per creare un intervallo di date e forzare automaticamente tutti i timestamp al di fuori dell’intervallo consentito sui valori 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 ')

#showdatetimes
print (some_dates)

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

Il risultato è un intervallo di date con tre valori datetime e l’ultimo datetime è NaT perché ha superato il valore massimo consentito dai panda.

Tieni presente che questa volta non riceviamo alcun errore durante la creazione dell’intervallo di date.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come risolvere il problema: le colonne si sovrappongono ma non è specificato alcun suffisso
Come risolvere il problema: l’oggetto “numpy.ndarray” non ha un attributo “append”.
Come risolvere il problema: se utilizzi tutti i valori scalari, devi passare un indice

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *