Pandas에서 Period(기간) 객체의 빈도를 원하는 주기로 변환하려면 asfreq() 메서드를 사용합니다. 이 메서드는 기존 Period 객체를 새로운 빈도로 변환한 결과를 반환하며, 데이터 분석 시 일·시간·분 등 다양한 시간 단위로 기간을 다뤄야 할 때 유용하게 활용됩니다.
이번 글에서는 시간(Hourly) 빈도를 의미하는 'H' 지정자를 사용하여 Period 객체의 빈도를 변환하는 방법을 예제와 함께 살펴보겠습니다.
1. 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd
2. Period 객체 생성
pandas.Period는 특정 시점의 기간(period of time)을 나타내는 객체입니다. 아래와 같이 두 가지 방식으로 Period 객체를 생성할 수 있습니다.
- period1: 날짜·시간 문자열을 직접 전달하여 생성
- period2: 빈도(
freq="D", 일 단위)와 연·월·일·시·분 값을 개별적으로 지정하여 생성
period1 = pd.Period("2020-09-23 03:15:40")
period2 = pd.Period(freq="D", year=2021, month=4, day=16, hour=2, minute=35)
3. Period 객체 출력
생성된 Period 객체를 화면에 출력해 내용을 확인합니다.
print("Period1...\n", period1)
print("Period2...\n", period2)
4. 원하는 빈도로 변환
asfreq() 메서드에 빈도 지정자를 인자로 전달하면 됩니다. 여기서는 시간 단위 빈도를 뜻하는 'H'(Hourly)로 변환했습니다.
res1 = period1.asfreq('H')
res2 = period2.asfreq('H')
전체 예제 코드
지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.
import pandas as pd
# pandas.Period는 기간을 나타내는 객체입니다.
# 두 개의 Period 객체를 생성합니다.
period1 = pd.Period("2020-09-23 03:15:40")
period2 = pd.Period(freq="D", year=2021, month=4, day=16, hour=2, minute=35)
# Period 객체를 출력합니다.
print("Period1...\n", period1)
print("Period2...\n", period2)
# 원하는 빈도로 변환합니다.
# 여기서는 시간(Hourly) 빈도를 의미하는 'H'로 설정했습니다.
res1 = period1.asfreq('H')
res2 = period2.asfreq('H')
# 변환 결과를 출력합니다.
print("\n첫 번째 Period 객체의 변환 결과...\n", res1)
print("\n두 번째 Period 객체의 변환 결과...\n", res2)
실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
Period1... 2020-09-23 03:15:40 Period2... 2021-04-16 첫 번째 Period 객체의 변환 결과... 2020-09-23 03:00 두 번째 Period 객체의 변환 결과... 2021-04-16 23:00
결과 해석
출력 결과를 보면 흥미로운 점을 확인할 수 있습니다.
- period1은 이미 시·분·초 정보를 포함하고 있으므로, 시간 빈도로 변환하면 해당 시각의 시작인
2020-09-23 03:00으로 변환됩니다. - period2는 일(Day) 빈도로 생성된 객체이므로 하루 전체를 나타냅니다. 따라서 시간 빈도로 변환하면 그날의 마지막 시간인
2021-04-16 23:00이 됩니다.
즉, asfreq()는 낮은 빈도에서 높은 빈도로 변환할 때 기간의 끝 지점을 기준으로 삼는다는 점을 기억해두면 좋습니다.
참고: 자주 사용되는 빈도 지정자
| 지정자 | 의미 |
|---|---|
'Y' | 연간(Yearly) |
'M' | 월간(Monthly) |
'D' | 일간(Daily) |
'H' | 시간(Hourly) |
'T' 또는 'min' | 분(Minutely) |
'S' | 초(Secondly) |
참고로 최신 버전의 Pandas(2.2 이상)에서는 대문자 'H'가 지원 중단(deprecated)되었으므로, 소문자 'h'를 사용하는 것이 권장됩니다.