Как исправить в pandas: временная метка в наносекундах выходит за пределы допустимого диапазона


Ошибка, с которой вы можете столкнуться при использовании панд:

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

Эта ошибка возникает при попытке создать метку времени за пределами следующего диапазона:

 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

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы пытаемся создать в pandas диапазон дат, содержащий следующие три даты:

  • 01.01.2020
  • 01.01.2150
  • 01.01.2300

Мы можем использовать функцию date_range() , чтобы попытаться создать этот диапазон дат:

 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

Мы получаем ошибку OutOfBoundsDatetime , поскольку временная метка 1/1/2300 превышает максимальную временную метку в наносекундах, разрешенную пандами.

Даже если вы не хотите хранить временную метку, используя в качестве единицы измерения наносекунды, pandas сделает это автоматически.

Как исправить ошибку

Самый простой способ обойти эту ошибку — использовать аргумент error = ‘coerce’ , который приводит все временные метки за пределами минимального или максимального диапазона к значениям NaT.

Например, мы можем использовать следующий код, чтобы создать диапазон дат и автоматически принудительно перевести все временные метки за пределы разрешенного диапазона в значения 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)

Результатом является диапазон дат с тремя значениями даты и времени, а последнее значение даты и времени — NaT, поскольку оно превысило максимальное значение, разрешенное пандами.

Обратите внимание, что на этот раз при создании диапазона дат мы не получаем никаких ошибок.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «append»
Как исправить: если вы используете все скалярные значения, вам необходимо передать индекс.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *