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

Python Pandas – 단일 단위의 배수 빈도로 DateTimeIndex 반올림하기

Pandas에서 DateTimeIndex를 단일 단위의 배수 빈도(예: 10분, 15초 등)로 반올림하려면 DateTimeIndex.round() 메서드를 사용합니다. 이때 freq 매개변수에 원하는 빈도 값을 지정하면 됩니다.

필요한 라이브러리 가져오기

먼저 pandas 라이브러리를 임포트합니다.

import pandas as pd

DatetimeIndex 생성하기

시작 시점을 지정하고, 기간(periods)은 5개, 빈도는 'H'(시간)로 설정하여 DatetimeIndex를 생성합니다. 타임존은 호주 애들레이드(Australia/Adelaide)로 지정했습니다.

datetimeindex = pd.date_range('2021-09-29 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='H')

생성된 DateTimeIndex를 출력해 확인해 보겠습니다.

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

단일 단위의 배수 빈도로 반올림 수행

이제 10분 단위의 빈도로 DateTimeIndex를 반올림해 보겠습니다. 분(minute) 빈도에는 별칭(alias)인 'T'를 사용하며, 여기서는 10분 간격을 의미하는 '10T'를 지정합니다.

print("\nPerforming round operation with multiples of a single unit frequency...\n",
datetimeindex.round(freq='10T'))

전체 예제 코드

지금까지 설명한 내용을 하나의 완성된 코드로 정리하면 다음과 같습니다.

import pandas as pd

# 기간 5개, 빈도 H(시간)인 DatetimeIndex 생성
# 타임존은 Australia/Adelaide
# 시작 시각: 2021-09-29 07:20:32.261811624
datetimeindex = pd.date_range('2021-09-29 07:20:32.261811624', periods=5,
tz='Australia/Adelaide', freq='H')

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

# DateTimeIndex의 빈도 출력
print("DateTimeIndex frequency...\n", datetimeindex.freq)

# 10분 단위 빈도로 반올림 수행
# 분 빈도에는 별칭 'T' 사용
print("\nPerforming round operation with multiples of a single unit frequency...\n",
datetimeindex.round(freq='10T'))

실행 결과

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

DateTimeIndex...
DatetimeIndex(['2021-09-29 07:20:32.261811624+09:30',
'2021-09-29 08:20:32.261811624+09:30',
'2021-09-29 09:20:32.261811624+09:30',
'2021-09-29 10:20:32.261811624+09:30',
'2021-09-29 11:20:32.261811624+09:30'],
dtype='datetime64[ns, Australia/Adelaide]', freq='H')
DateTimeIndex frequency...
<Hour>

Performing round operation with multiples of a single unit frequency...
DatetimeIndex(['2021-09-29 07:20:00+09:30', '2021-09-29 08:20:00+09:30',
'2021-09-29 09:20:00+09:30', '2021-09-29 10:20:00+09:30',
'2021-09-29 11:20:00+09:30'],
dtype='datetime64[ns, Australia/Adelaide]', freq=None)

결과 해석

출력 결과를 보면 원래의 DatetimeIndex는 나노초(nanosecond) 단위의 소수점 이하 값(07:20:32.261811624)을 포함하고 있지만, round(freq='10T')를 적용한 후에는 모든 타임스탬프가 가장 가까운 10분 단위(07:20:00, 08:20:00 등)로 반올림된 것을 확인할 수 있습니다.

참고로 반올림 연산이 적용된 새로운 DatetimeIndex는 freq=None으로 표시됩니다. 이는 반올림 작업으로 인해 원래의 규칙적인 빈도 정보가 유지되지 않기 때문입니다.