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


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

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

Самый простой способ обойти эту ошибку — использовать аргумент errors = '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')

#show datetimes
print(some_dates)

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

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

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

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

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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.