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

Python Pandas – DateTimeIndex를 시간 단위로 반올림하는 방법

DateTimeIndex를 시간 단위로 반올림하기

Pandas에서 DateTimeIndex를 시간(hourly) 단위로 반올림하려면 DateTimeIndex.round() 메서드를 사용합니다. 이때 freq 매개변수에 시간을 의미하는 'H' 값을 지정하면 됩니다.

참고: 최신 버전의 Pandas에서는 분을 나타내는 별칭 'T''min'으로 대체되었으니, 사용 중인 버전에 맞게 코드를 조정하면 됩니다.

1. 라이브러리 임포트

먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

2. DatetimeIndex 생성

기간(periods)은 5개, 빈도(freq)는 분을 의미하는 '35T'(35분 간격)로 설정하고, 타임존은 호주 애들레이드(Australia/Adelaide)로 지정하여 DatetimeIndex를 생성합니다.

datetimeindex = pd.date_range('2021-09-29 07:00', periods=5,
                              tz='Australia/Adelaide', freq='35T')

3. 생성된 인덱스 확인

생성된 DateTimeIndex를 출력해 확인합니다.

print("DateTimeIndex...\n", datetimeindex)

4. 시간 단위 반올림 수행

이제 freq='H' 옵션을 사용해 시간 단위 반올림 연산을 수행합니다. 반올림은 가장 가까운 시각 기준으로 처리되므로, 예를 들어 07:35는 08:00으로, 08:45는 09:00으로 변환됩니다.

print("\nPerforming round operation with hourly frequency...\n",
      datetimeindex.round(freq='H'))

전체 예제 코드

지금까지의 내용을 하나로 정리한 전체 코드는 다음과 같습니다.

import pandas as pd

# periods=5, freq=35분 간격, 타임존은 Australia/Adelaide로 DatetimeIndex 생성
datetimeindex = pd.date_range('2021-09-29 07:00', periods=5,
                              tz='Australia/Adelaide', freq='35T')

# 생성된 DateTimeIndex 출력
print("DateTimeIndex...\n", datetimeindex)

# 시(hour) 값만 추출
res = datetimeindex.hour
print("\nThe hour from DateTimeIndex...\n", res)

# freq='H' 옵션으로 시간 단위 반올림 수행
print("\nPerforming round operation with hourly frequency...\n",
      datetimeindex.round(freq='H'))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

DateTimeIndex...
DatetimeIndex(['2021-09-29 07:00:00+09:30', '2021-09-29 07:35:00+09:30',
               '2021-09-29 08:10:00+09:30', '2021-09-29 08:45:00+09:30',
               '2021-09-29 09:20:00+09:30'],
              dtype='datetime64[ns, Australia/Adelaide]', freq='35T')

The hour from DateTimeIndex...
Int64Index([7, 7, 8, 8, 9], dtype='int64')

Performing round operation with hourly frequency...
DatetimeIndex(['2021-09-29 07:00:00+09:30', '2021-09-29 08:00:00+09:30',
               '2021-09-29 08:00:00+09:30', '2021-09-29 09:00:00+09:30',
               '2021-09-29 09:00:00+09:30'],
              dtype='datetime64[ns, Australia/Adelaide]', freq=None)

결과 해석

실행 결과를 보면 반올림이 다음과 같이 적용된 것을 확인할 수 있습니다.

  • 07:00 → 07:00: 이미 정각이므로 그대로 유지됩니다.
  • 07:35 → 08:00: 08:00이 더 가까우므로 올림 처리됩니다.
  • 08:10 → 08:00: 08:00이 더 가까우므로 내림 처리됩니다.
  • 08:45 → 09:00, 09:20 → 09:00: 각각 가장 가까운 정각으로 반올림됩니다.

또한 반올림 후에는 원래의 빈도 정보(freq='35T')가 유지되지 않고 freq=None으로 표시되는 점도 참고하세요. 이처럼 round() 메서드는 시계열 데이터를 특정 시간 단위로 정규화할 때 매우 유용하게 활용됩니다.