Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – DateTimeIndex에서 특정 시간 사이 값의 인덱스 위치 반환하기

개요

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입니다. 이를 활용하면 경계 시각을 제외한 범위 검색도 가능합니다.