1. pandas.to_datetime [공식문서]
- 날짜/시간을 사용하는 datetime 객체로 변환
- 보통 csv 파일 불러왔을 때 날짜가 object로 되어 있는 경우가 많음, 이를 datetime으로 타입 변경
- 날짜/시간 활용도가 높아짐
# ex 1
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
# ex 2
df = pd.DataFrame({'year':[2015, 2016],
'month': [2, 3],
'day' : [4, 5]})
pd.to_datetime(df)
>> 0 2015-02-04
1 2016-03-05
dtype: datetime64[ns]
< format 파라미터에서 활용도 높은 포맷 코드 >
%d : day
%w : weekday를 숫자로(0: Sunday ~ 6: Saturday)
%m: month
%y: year, 뒤에 두 자리(ex. 00, 22)
%Y: year, 4자리 전부(ex. 2000, 2022)
%H: hour, 24시간제
%h: hour, 12시간제
%M: minute
%S: second
2. pandas.Series.dt [공식문서]
- datetime으로 되어 있는 날짜/시간 항목에서 한 가지 항목만 추출
- freq 값에 따라서 추출되는 값이 달라짐(s: 초, h: 시간, q: 분기(1~3월:1, 4~6월:2, 7~9월:3, 10~12월:4) 등)
# ex 1
>>> seconds_series = pd.Series(pd.date_range("2000-01-01", periods=3, freq="s"))
>>> seconds_series
0 2000-01-01 00:00:00
1 2000-01-01 00:00:01
2 2000-01-01 00:00:02
dtype: datetime64[ns]
>>> seconds_series.dt.second
0 0
1 1
2 2
dtype: int64
# ex 2
>>> hours_series = pd.Series(pd.date_range("2000-01-01", periods=3, freq="h"))
>>> hours_series
0 2000-01-01 00:00:00
1 2000-01-01 01:00:00
2 2000-01-01 02:00:00
dtype: datetime64[ns]
>>> hours_series.dt.hour
0 0
1 1
2 2
dtype: int64
# ex 3
>>> quarters_series = pd.Series(pd.date_range("2000-01-01", periods=3, freq="q"))
>>> quarters_series
0 2000-03-31
1 2000-06-30
2 2000-09-30
dtype: datetime64[ns]
>>> quarters_series.dt.quarter
0 1
1 2
2 3
dtype: int64
- 데이터프레임의 날짜, 시간을 변환 또는 추가하는 데에도 쓰인다
- ex) df['month'] = df['date'].dt.month (df의 date 컬럼에서 month를 추출해서 month 컬럼으로 새로 만든다)
df[column name].dt.date # YYYY-MM-DD(문자)
df[column name].dt.year # 연(4자리숫자)
df[column name].dt.month # 월(숫자)
df[column name].dt.month_name() # 월(문자)
df[column name].dt.day # 일(숫자)
df[column name].dt.time # HH:MM:SS(문자)
df[column name].dt.hour # 시(숫자)
df[column name].dt.minute # 분(숫자)
df[column name].dt.second # 초(숫자)
df[column name].dt.quarter # 분기(숫자)
df[column name].dt.weekday_name # 요일이름(문자) (=day_name())
df[column name].dt.weekday # 요일숫자(0-월, 1-화) (=dayofweek)
df[column name].dt.weekofyear # 연 기준 몇주째(숫자) (=week)
df[column name].dt.dayofyear # 연 기준 몇일째(숫자)
df[column name].dt.days_in_month # 월 일수(숫자) (=daysinmonth)
df[column name].dt.is_leap_year # 윤년 여부
df[column name].dt.is_month_start # 월 시작일 여부
df[column name].dt.is_month_end # 월 마지막일 여부
df[column name].dt.is_quarter_start # 분기 시작일 여부
df[column name].dt.is_quarter_end # 분기 마지막일 여부
df[column name].dt.is_year_start # 연 시작일 여부
df[column name].dt.is_year_end # 연 마지막일 여부
(참고: https://moondol-ai.tistory.com/180)
3. pandas.Series.dt.isocalendar [공식문서]
- ISO 8601 표준에 따라 year, week, day 표시
- 1월 1일이 월요일, 화요일, 수요일, 목요일인 주는 그 주의 월요일부터 일요일까지 그 해의 01주로, 그렇지 않으면 전 년도의 마지막 주(52주 또는 53주)로 계산되다가 오는 월요일부터 그 해의 01주로 계산되며, 매주 월요일마다 값이 하나 늘어난다. (참고)
# ex 1
>>> ser = pd.to_datetime(pd.Series(["2010-01-01", pd.NaT]))
>>> ser.dt.isocalendar()
year week day
0 2009 53 5
1 <NA> <NA> <NA>
>>> ser.dt.isocalendar().week
0 53
1 <NA>
Name: week, dtype: UInt32
# ex 2
df['week'] = df['date'].dt.isocalendar().week
df['year'] = df['date'].dt.isocalendar().year
- df의 date 컬럼의 week 값을 isocalendar 값으로 변환하여 새로 week 컬럼으로 추가
- year도 마찬가지
- year은 그대로 그 값이 들어가고, week은 ISO 8601에 따라서 1년 단위에서 몇 번째 주에 해당하는 숫자로 표시된다
'Python' 카테고리의 다른 글
py) return과 print의 차이 (0) | 2023.05.03 |
---|---|
메소드 오버라이딩과 메소드 오버로딩 in Python (0) | 2022.09.01 |