ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pandas] to_datetime 함수 알아보기
    Python 2022. 12. 20. 07:34
    728x90
    반응형

    - 목차

     

    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

     

     

    반응형
Designed by Tistory.