개요
Python의 Pandas 라이브러리에서 DateTimeIndex 객체에 대해 하루 중 특정 시간 범위(예: 오전 2시 30분 50초부터 오전 3시 20분 50초까지)에 속하는 값들의 인덱스 위치를 얻으려면 DateTimeIndex.indexer_between_time() 메서드를 사용하면 됩니다.
이 메서드는 start_time과 end_time 사이에 있는 값들의 정수 인덱스 위치 배열을 반환합니다. 시계열 데이터에서 특정 시간대의 데이터만 추출하거나 필터링할 때 매우 유용하게 활용됩니다.
필요한 라이브러리 임포트
먼저 필요한 라이브러리를 가져옵니다.
import pandas as pd
DatetimeIndex 생성
periods=5, freq='20T'(20분 간격)로 DatetimeIndex를 생성하고, 시간대(timezone)는 호주 애들레이드(Australia/Adelaide)로 지정합니다.
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='20T')DatetimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)특정 시간 사이 값의 인덱스 위치 조회
start_time은 '02:30:50', end_time은 '03:20:50'으로 설정하여 두 시각 사이에 있는 값들의 인덱스 위치를 확인합니다.
print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('02:30:50','03:20:50'))전체 예제 코드
다음은 위 내용을 모두 포함한 전체 코드입니다.
import pandas as pd
# 기간 5, 빈도 20T(분)인 DatetimeIndex 생성
# 시간대는 Australia/Adelaide
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='20T')
# DateTimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)
# DateTimeIndex 빈도 출력
print("\nDateTimeIndex frequency...\n", datetimeindex.freq)
# 특정 시각의 값 인덱스 위치 출력 (여기서는 03:10:50)
print("\nIndex locations of values at particular time of day...\n",
datetimeindex.indexer_at_time('2021-10-30 03:10:50'))
# 특정 시간 사이 값의 인덱스 위치 출력
# start_time은 '02:30:50', end_time은 '03:20:50'
print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('02:30:50','03:20:50'))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeIndex...
DatetimeIndex(['2021-10-30 02:30:50+10:30', '2021-10-30 02:50:50+10:30',
'2021-10-30 03:10:50+10:30', '2021-10-30 03:30:50+10:30',
'2021-10-30 03:50:50+10:30'],
dtype='datetime64[ns, Australia/Adelaide]', freq='20T')
DateTimeIndex frequency...
<20 * Minutes>
Index locations of values at particular time of day...
[2]
Index locations of values between particular time of day...
[0 1 2]
결과 해석
생성된 DatetimeIndex는 2021년 10월 30일 02:30:50부터 시작해 20분 간격으로 총 5개의 타임스탬프를 가집니다.
- indexer_at_time('03:10:50'): 정확히 03:10:50에 해당하는 값의 인덱스 위치 [2]를 반환합니다.
- indexer_between_time('02:30:50', '03:20:50'): 02:30:50부터 03:20:50 사이에 있는 값들의 인덱스 위치 [0 1 2]를 반환합니다. 즉, 첫 번째, 두 번째, 세 번째 요소가 해당 시간 범위에 포함됩니다.
참고로 indexer_between_time() 메서드에는 include_start와 include_end 매개변수가 있어 시작·종료 경계 시각의 포함 여부를 조절할 수 있으며, 기본값은 둘 다 True입니다. 이를 활용하면 경계 시각을 제외한 범위 검색도 가능합니다.