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에서 날짜 범위를 생성하려고 한다고 가정합니다.
- 2020년 1월 1일
- 2150년 1월 1일
- 2300년 1월 1일
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
타임스탬프 1/1/2300이 Pandas에서 허용하는 최대 타임스탬프(나노초)보다 크기 때문에 OutOfBoundsDatetime 오류가 발생합니다.
나노초를 단위로 사용하여 타임스탬프를 저장하고 싶지 않더라도 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)
결과는 3개의 날짜/시간 값이 있는 날짜 범위이며 마지막 날짜/시간은 Pandas에서 허용하는 최대값을 초과했기 때문에 NaT입니다.
이번에는 기간을 생성할 때 오류가 발생하지 않습니다.
추가 리소스
다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.
수정방법: 열이 겹치는데 접미사가 지정되지 않음
수정 방법: ‘numpy.ndarray’ 개체에 ‘append’ 속성이 없습니다.
해결 방법: 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야 합니다.