본문 바로가기
Python_Wiki/Python_Library

pandas 판다스: 날짜 다루기

by yj-data 2025. 7. 11.

1. 문자형을 날짜형으로 변경: pd.to_datetime(컬럼, format='날짜 형식')

#examples
pd.to_datetime(df['Date'], format='%Y-%m-%d') 

df['Date1'] = pd.to_datetime(df['Date'], format='%Y-%m-%d') #새로운 컬럼에 변환한 값 넣기
df=pd.read_csv('url',parse_dates=['col_name']) #불러올때 'col_name'의 자료형을 바로 datetime으로 변경해서 호출하기

 

날짜 형식 

코드 의미 예시
%Y 연도 (4자리) 2025
%y 연도 (2자리) 25
%m 월 (2자리) 07
%B 월 이름 (영문, 전체) July
%b 월 이름 (영문, 축약) Jul
%d 일 (2자리) 11
%A 요일 이름 (영문, 전체) Friday
%a 요일 이름 (영문, 축약) Fri
%w 요일 숫자 (0=일요일 ~ 6=토요일) 5
%j 연중 일수 (1~366) 192

 

시간 형식

코드 의미 예시
%H 시 (24시간제, 00~23) 14
%I 시 (12시간제, 01~12) 02
%p AM / PM PM
%M 분 (00~59) 35
%S 초 (00~59) 45
%f 마이크로초 (6자리) 000000

 

2. 날짜 형식 변경

column_name.dt.strftime(날짜형식)
#example
df['Date1'].dt.strftime('%m-%d %H:%M')

 

3. dt연산자

dt.year  #연도
dt.month #월
dt.day   #일
dt.dayofweek	#요일(0-월요일, 6-일요일)  #day_of_week
dt.day_name()	#요일을 문자열로

df['year'] = df['Date1'].dt.year
df['month'] = df['Date1'].dt.month
df['day'] = df['Date1'].dt.day
df['dayofweek'] = df['Date1'].dt.dayofweek
df['dayname'] = df['Date1'].dt.day_name()

#이미 있는 날짜형('%Y-%m-%d %H:%M')이 있을때, 여기서 ymd만 뽑기
df['new_col_name'] = df['col_name'].dt.date.astype('datetime64')
#ymd에서 ym뽑기, 꼭 ymd아니고, datetime 인 모든 데이터 형태에서 월단위를 뽑을수있음
df['new_col_name(ym)'] = df['col_name(ymd)'].dt.to_period('M')

 

속성이름 설명 결과 형태 요일 값 사용 예
dayofweek 요일을 숫자로 반환 (0=월) 정수 (int) 0~6 df['date'].dt.dayofweek
day_of_week dayofweek의 alias (동의어) 정수 (int) 0~6 df['date'].dt.day_of_week
day_name() 요일을 이름으로 반환 문자열 (str) 'Monday' 등 df['date'].dt.day_name()

 

 

4. 날짜계산

#day 연산: pd.Timedelta(day=숫자)
#month 연산: DateOffset(months=숫자)
#year 연산: DateOffset(years=숫자)

df['minus day7'] = df['Date1'] - pd.Timedelta(days=7)
df.head()

from pandas.tseries.offsets import DateOffset
df['plus month1'] = df['Date1'] + DateOffset(months=1)
df['minus year3'] = df['Date1'] - DateOffset(years=3)
df.head()

 

5. 날짜 구간 데이터 만들기

#pd.date_range(start=시작일자, end=종료일자, periods=기간수, freq=주기)

D	#일별
W	#주별
M	#월별 말일
MS	#월별 시작일
A	#연도별 말일
AS	#연도별 시작일

pd.date_range(start='2020-01-01', periods=30, freq='D')
pd.date_range(start='2020-01-01', end='2023-06-30', freq='A')

 

결과 예시

 

6. 기간 이동 계산

col_name.rolling().집계함수 #rolling함수는 이동평균 구할때 많이 사용함

#7일 이동평균
df1['ma7'] = df1['Temp'].rolling(7).mean() #mean외, sum(), min(), max() 등 다양하게 가능
df1.head(20)

 

7. 행 이동

col_name.shift(이동할 행의 수)
#example
df2['Temp shift1'] = df2['Temp'].shift(1) #1개행씩 밀림. 음수 넣으면 위로 칸을 땡길 수 있음
df2.head()

df2['pct change'] = (df2['Temp shift1'] - df2['Temp'])/df2['Temp'] #전날대비 증감률 계산
df2.head()

결과1/2