목차
1. datetime
1) pd.to_datetime()
pd.to_datetime( 날짜 ) 문자열, 숫자, 리스트 등의 데이터를 날짜(datetime) 형식으로 변환하는 함수이다.
자동으로 날짜 형식을 인식해서 변환해주며, 시간이 없으면 00:00:00으로 추가된다.
pd.to_datetime("2025-03-22")
2025-03-22 00:00:00
pd.to_datetime(df['Yr_Mo_Dy'])


겉으로 보기에는 같을지 몰라도, dtype을 보면 datetime으로 바뀐 것을 알 수 있다.
2) dt
dataframe. dt .형식 : datetime 형식의 데이터를 쉽게 조작할 수 있도록 도와주는 pandas의 기능이다. 대표적으로 아래와 같은 속성을 추출한다.
year, month, day, hour, minute, second
df['Yr_Mo_Dy'] = pd.to_datetime(df['Yr_Mo_Dy'])
n_year = df['Yr_Mo_Dy'].dt.year
n_month = df['Yr_Mo_Dy'].dt.month
n_day = df['Yr_Mo_Dy'].dt.day



dt 접근자를 이용해 아래의 속성도 추출할 수 있다.
weekday 요일(0~6) ---> 0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일
day_name() 요일 이름
month_name() 월 이름
is_month_start 월의 첫날 여부
is_month_end 월의 마지막 날 여부
is_leap_year 윤년 여부

위 내용을 바탕으로 새로운 datetime을 만들 수도 있다.
pd.to_datetime({"year": , "month":, "day":})
--> dictionary 형태를 넣어서 키:속성으로 다시 datetime을 만든다.
df['Yr_Mo_Dy'] = pd.to_datetime({"year": n_year, "month":n_month, "day":n_day})

3) to_period()
pd. to_period : 날짜를 특정 주기(period) 단위로 변환하는 기능을 하며 계산이 가능하다.
pandas의 datetime 형식의 컬럼은 series 형태로 저장이 되는데, to_period()는 개별 날짜 값에 적용되는 메서드이기 때문에 series전체에 적용하려면 접근자 dt.를 써야 한다.
yearly : 'Y'
Quarter : 'Q'
montly : 'M'
weekly : 'W' --> 시작요일 지정 방법 ('W-SUN')
daily : 'D'


df.groupby(df['Yr_Mo_Dy'].dt.to_period('M')).mean()

df['date'].dt.to_period('W-SUN')


4) strftime()
str f time : string format time 이라는 의미처럼 datetime 값을 문자열로 변환하는 함수
연 Y / y
월(숫자) m
월(문자) B / b
일 d
요일 A / a
시간 H(24시간) / h(12시간)
AM/PM p
분 M
초 s

df['Yr_Mo_Dy'].dt.strftime("%Y")

df['Yr_Mo_Dy'].dt.strftime('%Y/%m/%d/%a')

to_period() vs strftime()

날짜를 기간 단위로 변환하여 연산도 하려면 to_period()를, 그냥 문자열로 변환하여 출력하려면 strftime()을 쓰면 된다.
5) strptime()
str p time : string parse time문자열을 datetime객체로 변환하는 함수
주어진 형식으로 변환하나, 앞선 문자열과 동일한 형태(format)을 취해야 한다.
ex) /// --> /// 구분자 동일
import datetime
datetime.datetime.strptime(문자열, format)


6) timedelta
datetime 연산을 하려면 timedelta를 써야 한다. 그러면 자동으로 윤달도 계산하여 날짜를 정확하게 연산해준다.
datetime 기준 시간 +/- timedelta(format)
days = ? 날짜
weeks = ? 주*7일
hours = ? 시간
minutes = ? 분
seconds =? 초
milliseconds = ? 1/1000 초

< 하루 전 >
datetime - timedelta
import datetime
datetime_df = str_df.apply(lambda x : datetime.datetime.strptime(x, "%Y/%m/%d/%a"))
datetime_df - datetime.timedelta(days=1)


< 일주일 전 >
datetime - timedelta
one_week_before = datetime_df - datetime.timedelta(weeks=1)
one_week_before


< 날짜 차이 : days >
datetime - datetime 날짜 차이
datetime_df = str_df.apply(lambda x : datetime.datetime.strptime(x, "%Y/%m/%d/%a"))
one_day_before = datetime_df - datetime.timedelta(days=1)
diff = datetime_df - one_day_before
diff

diff.apply(lambda x: x.days)

< 1시간 30분 후 >
datetime + timedelta 시간 더하기
time_after_df = datetime_df + datetime.timedelta(hours = 1, minutes=30)
time_after_df

< 24시간 이내 차이 : seconds >
datetime - datetime 시간 차이
datetime_df = str_df.apply(lambda x : datetime.datetime.strptime(x, "%Y/%m/%d/%a"))
time_after_df = datetime_df + datetime.timedelta(hours = 1, minutes=30)
diff = time_after_df - datetime_df
diff

시간 차이 계산 seconds
- 초 기준
diff.apply(lambda x:x.seconds)

- 분 기준
diff.apply(lambda x:x.seconds/60)

< 전체 시간 차이 : seconds >
total seconds는 seconds와 다르다. seconds는 날짜는 무시하고 24시간 이내의 시간 단위만 반환하는 것에 비해 total_seconds()는 전체 날짜 개념을 초단위로 반환한다.
time_after_df = datetime_df + datetime.timedelta(days = 3, hours = 1, minutes=30)
time_after_df

diff = time_after_df - datetime_df
diff

diff.apply(lambda x:x.seconds)

diff.apply(lambda x:x.total_seconds())

7) resample()
판다스에서 시간 단위를 변경할 때 사용하는 함수이며, 주로 시간 데이터를 그룹화하여 집계할 때 사용한다.
단, 조건은 index가 날짜(datetime)이어야 한다.
df.resample(rule).agg(func)
(rule) --> 새로운 시간 간격
D : 일별
W : 주별
M : 월별

(func)
sum, mean, count

위의 데이터에서 우선 인덱스를 datetime으로 하고, select_dtypes(include=?)로 number형 데이터만 추출한 뒤, resample해준다.
df_num.resample('W').agg(['min', 'max', 'std', 'min'])

datetime, to_datetime, dt, to_period,strftime, strptime, timedelta
'파이썬 > 판다스' 카테고리의 다른 글
pandas 배우기 6편 enocoding 한글 인코딩 utf-8 euc-kr (0) | 2024.11.15 |
---|---|
pandas 배우기 5편 모델 : 훈련, GridSearchCV, 하이퍼파라미터, 평가 : logisticRegression, RandomForest, XGBClassifier (2) | 2024.11.09 |
pandas 배우기 4편 데이터 전처리 : upsampling(업샘플링), outlier(이상치) , 상관관계, 차원변환 (0) | 2024.11.08 |
pandas 배우기 3편 데이터시각화: 빅분기 ADP 데이터분석 시험, 파이차트, 히스토그램, 박스플랏, 스케터플랏,히트맵 (1) | 2024.11.07 |
pandas 배우기 2편 데이터전처리 :빅분기 ADP 데이터분석 요약 (0) | 2024.10.11 |