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