-
[pandas] to_datetime 함수 알아보기Python 2022. 12. 20. 07:34728x90반응형
- 목차
to_datetime.
Pandas 의 DataFrame 은 datetime 타입을 지원합니다.
하지만 명시적으로 datetime 타입을 지정하지 않으면 DataFrame 또는 Series 내부적으로 object 타입으로 지정하게 됩니다.
예를 들어, 아래의 Kaggle 의 날씨 데이터를 read_csv 함수를 통해서 DataFrame 을 생성할 때에 "date" 칼럼은 object 타입으로 지정되죠.
import pandas as pd url = ("https://storage.googleapis.com/kagglesdsdata/datasets/312121/636393/DailyDelhiClimateTest.csv" "?X-Goog-Algorithm=GOOG4-RSA-SHA256" "&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com%2F20240710%2Fauto%2Fstorage%2Fgoog4_request" "&X-Goog-Date=20240710T220629Z&X-Goog-Expires=259200" "&X-Goog-SignedHeaders=host" "&X-Goog-Signature=6ca4ab19b9d7b330ba0aed47fb4c18e459bce4f089e0151ae72faed1df12c59e06848bc61d58bba62b08d3f3eccfc4cff5cd84c2e93f074e9e8817959ec2d4d33ee120f53550f796e42f68538102e4fcd6906a1e9a5c30b9e197926838dcd7c48a59500a11d14ed932b0a00dd73896ad9ef7060c643f790b3862a2d0499b474f8831ab982cd587e8b3a0e4c284380eb9e4dc7113a1399a69c02df2368549fb54018d0c1c06c93ad613bf55104d68003dd8b2a99df6ffe713e19e81b49a6d25d66d92a93a1d917a6677f39f3054c84949fef8e964a0b43c2aae2f0422bf3218e3f08d5fc8f50377b306115b6099a9db99d345afe3d120dd0531963e8f81e175b1") df = pd.read_csv(url) df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 114 entries, 0 to 113 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 114 non-null object 1 meantemp 114 non-null float64 2 humidity 114 non-null float64 3 wind_speed 114 non-null float64 4 meanpressure 114 non-null float64 dtypes: float64(4), object(1) memory usage: 4.6+ KB
이 상황에서 to_datetime 함수를 통해서 object 타입을 datetime 타입으로 변경이 가능합니다.
먼저 date 칼럼의 데이터 형태를 살펴볼까요 ?
아래와 같이 %Y-%m-%d 포맷을 취하며, object 타입으로 설정되어 있습니다.
df['date']
0 2017-01-01 1 2017-01-02 2 2017-01-03 3 2017-01-04 4 2017-01-05 ... 109 2017-04-20 110 2017-04-21 111 2017-04-22 112 2017-04-23 113 2017-04-24 Name: date, Length: 114, dtype: object
이 경우에 아래와 같은 형식으로 to_datetime 함수를 Format 을 지정하여 호출하면, object 타입에서 datetime 타입으로 타입 변경이 가능합니다.
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
<class 'pandas.core.frame.DataFrame'> RangeIndex: 114 entries, 0 to 113 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 114 non-null datetime64[ns] 1 meantemp 114 non-null float64 2 humidity 114 non-null float64 3 wind_speed 114 non-null float64 4 meanpressure 114 non-null float64 dtypes: datetime64[ns](1), float64(4) memory usage: 4.6 KB
Python Datetime Format.
Datetime 과 관련된 여러가지 Datetime Format 에 대해서 알아봅니다.
%Y-%m-%d.
%Y-%m-%d 는 2023-10-02 와 같이 Dash (-) 로 구분된 Year-Month-Day 문자열을 나타내는 포맷입니다.
아래는 2개의 Datetime 문자열을 가지는 Series 를 대상으로 to_datetime 을 적용한 예시입니다.
import pandas as pd data = pd.Series(["2023-01-01", "1992-03-05"]) data = pd.to_datetime(data, format="%Y-%m-%d")
0 2023-01-01 1 1992-03-05 dtype: datetime64[ns]
%H:%M:%S.
H 와 M, S 는 시각 정보를 나타냅니다.
H 는 시간, M 은 분, S 는 초에 대한 정보를 표현하죠.
아래와 같이 Year 부터 Second 까지 표현하는 Datetime 문자열은 아래와 같이 파싱되게 됩니다.
import pandas as pd data = pd.Series(["2023-01-01 12:04:11", "1992-03-05 00:24:10"]) data = pd.to_datetime(data, format="%Y-%m-%d %H:%M:%S") data
0 2023-01-01 12:04:11 1 1992-03-05 00:24:10 dtype: datetime64[ns]
Timezone.
시간을 표현하는 여러가지 포맷들 중에서 Timezone 은 %z 와 %Z 로 표현합니다.
소문자 z 는 +00:00 와 같이 시차값을 통해서 표현하구요.
대문자 Z 는 UTC, Asia/Seoul 과 같이 Timezone 의 Code 로써 표현합니다.
아래는 Timezone 의 시차 정보를 %z 를 통해서 표현한 예시입니다.
참고로 +00:00 는 UTC 를, +09:00 한국 시간대를 의미합니다.
import pandas as pd data = pd.Series(["2023-01-01 12:04:11 +09:00", "2023-01-01 13:04:11 +09:00"]) data = pd.to_datetime(data, format="%Y-%m-%d %H:%M:%S %z") data.info()
<class 'pandas.core.series.Series'> RangeIndex: 2 entries, 0 to 1 Series name: None Non-Null Count Dtype -------------- ----- 2 non-null datetime64[ns, UTC+09:00] dtypes: datetime64[ns, UTC+09:00](1) memory usage: 144.0 bytes
대문자 %Z 포맷을 통해서 Timezone Code 에 대한 파싱 또한 가능합니다.
import pandas as pd data = pd.Series(["2023-01-01 12:04:11 Asia/Seoul", "2023-01-01 13:04:11 Asia/Seoul"]) data = pd.to_datetime(data, format="%Y-%m-%d %H:%M:%S %Z") data.info()
<class 'pandas.core.series.Series'> RangeIndex: 2 entries, 0 to 1 Series name: None Non-Null Count Dtype -------------- ----- 2 non-null datetime64[ns, UTC+09:00] dtypes: datetime64[ns, UTC+09:00](1) memory usage: 144.0 bytes
반응형'Python' 카테고리의 다른 글
[numpy] axis 사용법 ( min, max, sum ) 알아보기 (0) 2023.09.06 [Pandas] stack 사용하여 Pivot Table 만들기 ( pivot_table ) (0) 2023.07.10 [pandas] get_dummies 알아보기 ( One Hot Encoding ) (0) 2023.02.06 Matplotlib Scatter 사용법 알아보기 (0) 2023.01.21 [pickle] dump, load 알아보기 ( Serialization ) (0) 2021.12.15