Python

[파이썬] 날짜 차이 계산, 날짜 범위 리스트 생성 - DateOffset, date_range

weweGH 2025. 4. 27. 17:00
반응형

날짜 차이 계산, 범위 출력
날짜 차이 계산, 범위 출력


날짜 차이 계산, DateOffset/ 날짜 범위 리스트 생성


들어가며


데이터 분석을 하기 전, 조심해야 하는 부분 중 하나는 날짜, 시간 데이터에 관한 처리입니다. 이 글에서는 날짜 차이 계산, DateOffset을 통하여 특정 기간에 대한 차이 계산, 날짜 범위 추출에 관한 방법을 설명합니다. 예제로 사용하는 데이터는 캐글의 지진 데이터셋입니다.

먼저 위의 링크에서 데이터 다운로드 후 read_csv로 데이터를 불러옵니다.

df = pd.read_csv('earthquake_1995-2023.csv')
df.head()

df.head()
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()

DateOffset
DateOffset

반응형

날짜 범위


특정 기간에 대한 날짜 범위 리스트가 필요할 때, 수동 입력이 아닌 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

d_list
d_list


날짜 범위 리스트를 YYYYMMDD 형식으로 포맷을 변경한다면 다음과 같습니다.

d_list2 = pd.date_range('20240101', '20240110').format(formatter=lambda x: x.strftime('%Y%m%d'))
d_list2

d_list2
d_list2


아래와 같이 freq 옵션을 사용하면 시작 날짜와 종료 날짜 동안 특정 주기의 날짜 리스트를 생성할 수 있습니다. 1개월 주기는 다음과 같습니다.

d_list3 = pd.date_range('20240101', '20280101', freq='M') # 1개월 주기
d_list3

d_list3
d_list3


2개월 주기는 다음과 같습니다.

d_list4 = pd.date_range('20240101', '20280101', freq='2M') # 2개월 주기
d_list4

d_list4
d_list4


1년 주기는 다음과 같습니다.

d_list5 = pd.date_range('20240101', '20280101', freq='Y') # 1년 주기
d_list5

d_list5
d_list5


5시간 주기는 다음과 같습니다.

d_list6 = pd.date_range('20240101', '20240102', freq='5h') # 5시간 주기
d_list6

d_list6
d_list6


 

 

반응형