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