DatetimeIndex 빈도 감지란?
Pandas에서 날짜·시간 데이터를 다룰 때 DatetimeIndex는 매우 유용한 인덱스 구조입니다. 이때 해당 인덱스가 어떤 주기(빈도)로 생성되었는지 확인해야 하는 경우가 종종 있습니다. 지정된 DatetimeIndex 객체의 빈도를 자동으로 감지하려면 DateTimeIndex.inferred_freq 속성을 사용하면 됩니다.
이 속성은 인덱스에 명시적으로 빈도(freq)가 설정되어 있지 않더라도, 실제 날짜 값들의 간격을 분석하여 규칙적인 패턴을 추론해 줍니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
다음으로, 기간(periods)이 5이고 빈도가 '3Y'(3년 주기)인 DatetimeIndex를 생성합니다. 시간대(timezone)는 호주 애들레이드(Australia/Adelaide)로 지정합니다.
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='3Y')생성된 DateTimeIndex를 출력해 확인합니다.
print("DateTimeIndex...\n", datetimeindex)그리고 DateTimeIndex에 설정된 빈도를 출력합니다.
print("\nDateTimeIndex frequency...\n", datetimeindex.freq)전체 예제 코드
아래는 위 과정을 하나로 정리한 전체 코드입니다.
import pandas as pd
# 기간 5, 빈도 3Y(3년 주기)인 DatetimeIndex 생성
# 시간대는 Australia/Adelaide로 설정
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='3Y')
# DateTimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)
# DateTimeIndex의 빈도 출력
print("\nDateTimeIndex frequency...\n", datetimeindex.freq)
# 빈도 자동 감지
print("\nInferred DateTimeIndex frequency...\n", datetimeindex.inferred_freq)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeIndex... DatetimeIndex(['2021-12-31 02:30:50+10:30', '2024-12-31 02:30:50+10:30', '2027-12-31 02:30:50+10:30', '2030-12-31 02:30:50+10:30', '2033-12-31 02:30:50+10:30'], dtype='datetime64[ns, Australia/Adelaide]', freq='3A-DEC') DateTimeIndex frequency... <3 * YearEnds: month=12> Inferred DateTimeIndex frequency... 3A-DEC
결과 해석
출력 결과를 살펴보면 몇 가지 흥미로운 점을 확인할 수 있습니다.
- 시작일을 '2021-10-30'으로 지정했지만, 연 단위 빈도가 적용되면서 각 날짜가 12월 31일(연말)로 조정된 것을 볼 수 있습니다.
freq속성은<3 * YearEnds: month=12>형태로 표시되며, 이는 매년 12월 말을 기준으로 3년 주기임을 의미합니다.inferred_freq속성은 동일한 정보를 문자열'3A-DEC'형태로 반환합니다. 여기서 A는 연말(Annual End), DEC는 12월 기준을 나타냅니다.
이처럼 inferred_freq 속성을 활용하면 시계열 데이터의 주기를 손쉽게 파악할 수 있어, 리샘플링(resampling)이나 주기 기반 연산을 수행하기 전에 데이터의 규칙성을 검증하는 데 큰 도움이 됩니다.