
날짜 차이 계산, DateOffset/ 날짜 범위 리스트 생성
들어가며
데이터 분석을 하기 전, 조심해야 하는 부분 중 하나는 날짜, 시간 데이터에 관한 처리입니다. 이 글에서는 날짜 차이 계산, DateOffset을 통하여 특정 기간에 대한 차이 계산, 날짜 범위 추출에 관한 방법을 설명합니다. 예제로 사용하는 데이터는 캐글의 지진 데이터셋입니다.
먼저 위의 링크에서 데이터 다운로드 후 read_csv로 데이터를 불러옵니다.
df = pd.read_csv('earthquake_1995-2023.csv')
df.head()

- 날짜 차이 계산
- DateOffset
- 날짜 범위
날짜 차이 계산
날짜 데이터의 차이를 계산하기 위해서는 데이터 타입을 일치시키는 것이 가장 중요합니다.
df 데이터셋에 date_time이라는 지진이 발생한 시점에 관한 컬럼이 있습니다. date_time 컬럼과 현재 시간과의 차이를 계산해 보겠습니다. 먼저 to_datetime을 활용하여 데이터 타입이 일치하도록 변경하고, 아래 3가지 방법 중 편리한 방법을 사용하면 됩니다.
df['date_time_now'] = pd.to_datetime(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")) # 현재 시간 컬럼 생성
df['date_time_rev'] = pd.to_datetime(df['date_time'], format="%d-%m-%Y %H:%M") # date_time 컬럼 타입 변환
# i)
df['date_time_sub1'] = (df['date_time_now'] - df['date_time_rev']).astype('timedelta64[s]')
# ii)
df['date_time_sub2'] = (df['date_time_now'] - df['date_time_rev'])
# iii)
df['date_time_sub3'] = abs((df['date_time_now'] - df['date_time_rev']).dt.days)
df.head()

DateOffset
데이터셋 내부에서 차이를 계산하는 방법 외에도 DateOffset을 사용하면 특정 기간을 더하거나 뺄 수도 있습니다.
아래처럼 특정 기간을 더하거나 빼야 한다면, DateOffset을 사용합니다. year, month, day, hour 원하는 단위대로 추출할 수 있습니다. 주의할 점은 데이터 타입이 datetime64가 되어야지만 DateOffset을 사용할 수 있습니다.
df['date_time_y1'] = pd.to_datetime(df['date_time']) - DateOffset(years=1) # 1년 전
df['date_time_m2'] = pd.to_datetime(df['date_time']) - DateOffset(months=2) # 2개월 전
df['date_time_d3'] = pd.to_datetime(df['date_time']) - DateOffset(days=3) # 3일 전
df['date_time_h4'] = pd.to_datetime(df['date_time']) - DateOffset(hours=4) # 4시간 전
df[['date_time', 'date_time_y1', 'date_time_m2', 'date_time_d3', 'date_time_h4']].head()

날짜 범위
특정 기간에 대한 날짜 범위 리스트가 필요할 때, 수동 입력이 아닌 date_range를 활용하여 빠르고 편리하게 날짜 리스트를 추출하는 방법을 소개합니다.
i) 날짜 범위 수동 입력
물론 아래와 같이 날짜를 수동으로 입력하는 방법도 있지만, 훨씬 편리한 방법을 소개합니다.
d_list_manual = ['20240101','20240102','20240103']
d_list_manual

ii) date_range를 활용한 날짜 범위
date_range를 사용하면, 시작 날짜와 종료 날짜만 입력하고 날짜 리스트를 생성할 수 있습니다.
d_list = pd.date_range('20240101', '20240110')
d_list

날짜 범위 리스트를 YYYYMMDD 형식으로 포맷을 변경한다면 다음과 같습니다.
d_list2 = pd.date_range('20240101', '20240110').format(formatter=lambda x: x.strftime('%Y%m%d'))
d_list2

아래와 같이 freq 옵션을 사용하면 시작 날짜와 종료 날짜 동안 특정 주기의 날짜 리스트를 생성할 수 있습니다. 1개월 주기는 다음과 같습니다.
d_list3 = pd.date_range('20240101', '20280101', freq='M') # 1개월 주기
d_list3

2개월 주기는 다음과 같습니다.
d_list4 = pd.date_range('20240101', '20280101', freq='2M') # 2개월 주기
d_list4

1년 주기는 다음과 같습니다.
d_list5 = pd.date_range('20240101', '20280101', freq='Y') # 1년 주기
d_list5

5시간 주기는 다음과 같습니다.
d_list6 = pd.date_range('20240101', '20240102', freq='5h') # 5시간 주기
d_list6

'Python' 카테고리의 다른 글
[파이썬] 이미지 객체 탐지 - CCTV 이미지를 활용한 교통량 검지 (7) | 2025.05.01 |
---|---|
[파이썬] API를 활용한 유튜브 크롤링 - 댓글, 조회수, 좋아요 수 수집 (0) | 2025.04.28 |
[파이썬] 데이터프레임 행 반복 처리 - iterrows, itertuples (2) | 2025.04.24 |
[파이썬] 토이 프로젝트 - 테니스 코트 정보 확인(날씨 예보, 주차 등) (2) | 2025.04.23 |
[파이썬] Slack API를 활용한 슬랙 메시지 전송 (0) | 2025.04.22 |