ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [datetime, dateutil] 파이썬 날짜 차이 계산을 하는 몇 가지 방법
    Python/파이썬 기초 2023. 5. 9. 14:48
    반응형

    파이썬 날짜 차이 계산을 하는 몇 가지 방법


    파이썬(Python)에서 날짜를 다루는 자료형은 하나로 통일되지 않아서 계산에 어려움이 있습니다. 날짜 자료형의 특징을 알아두고 잘 사용한다면 날짜 형식을 숫자처럼 계산할 수 있지만, 그렇지 않다면 이것도 계산이 안되고 저것도 안되는 난감한 상황을 맞닥뜨리게 되지요. 파이썬에서는 크게 두 종류의 날짜 표현 방식을 만나볼 가능성이 높습니다.

     

     

    • datetime 패키지의 datetime
    • Pandas 패키지의 Timestamp

     

    datetime, timedelta 클래스


    datetime 클래스는 파이썬 내장 패키지인 datetime 에서 지원하는 클래스입니다. 연, 월, 일, 시, 분, 초, 마이크로초 정보를 입력하면 이들 사이에 연산이 가능하답니다. 이 클래스는 덧셈 및 뺄셈 연산으로 날짜 경과 또는 차이 계산 등의 작업을 수행할 수 있습니다.

     

     

    간단한 날짜 계산을 해 보겠습니다. 현재 시간을 X, 과거 임의의 시간을 Y로 설정한 뒤 두 시간의 차이를 구하는 계산입니다.

     

     

    from datetime import datetime
    
    X = datetime.today()  # 오늘 날짜를 저장
    Y = datetime(2023,5,1)  # 2023년 5월 1일을 저장

     

    X - Y
    datetime.timedelta(days=8, seconds=51839, microseconds=604238)

     

     

    위와 같이 계산한다면, 두 날짜 사이의 시간 차이인 8일이 결과로 리턴되는 것을 확인핤 수 있습니다. 코드의 실행 날짜에 따라서 달라질 수 있으니, 만약 결과가 다르게 나왔더라도 당황하지는 않아도 됩니다.

     

     

    파이썬에서는 시간의 흐름 또는 차이를 timedelta 클래스로 표현합니다. 일반적인 숫자 자료형과 달리, 특정 시점과 시간의 차이가 다르게 표현되는 것에 유의해 주세요.

     

     

    Pandas Timestamp, Timedelta 클래스


    파이썬에서 표 형식의 데이터를 다루는데 주로 사용되는 판다스(Pandas) 패키지는 Timestamp 라는 별도의 클래스를 통해 시간을 표현합니다. 이 클래스는 YYYY-MM-DD 형식으로 날짜를 표현하며, 많은 연산에서 datetime 과 호환되기 때문에 연산 자체는 큰 어려움 없이 할 수 있다는 장점이 있습니다. 여기서는 Timestamp로 2023년 1월 9일 날짜를 설정한 다음, 위에서 계산한 것과 똑같이 처리해 보도록 하겠습니다.

     

     

    import pandas as pd
    
    Z = pd.Timestamp('2023-01-09')

     

    Z - Y
    Timedelta('-112 days +00:00:00')

     

     

    위 계산에서는 두 날짜 사이의 시간 차이인 8일이 Timedelta 라는 클래스로 리턴되는 것을 확인핤 수 있습니다. Timedelta 는 파이썬 datetime 패키지에서 사용하는 timedelta 클래스와 유사항 클래스인데요, 서로 어느정도 호환되기 때문에 일반적으로는 둘의 구분 없이 이용하더라도 큰 문제는 없습니다.

     

     

    그런데, 위 결과에서 -112 days로 표현되는 것을 확인할 수 있는데요, 판다스 Timedelta 또는 datetime timedelta 의 경우, 시간의 방향성을 고려하기 때문에 음수 표현이 가능한 특징이 있답니다.

     

     

    연, 월 단위 날짜 계산


    위 방법을 이용한다면, 특정한 시점 사이에 며칠 간격의 차이가 나는지를 간편하게 알아볼 수 있습니다. 하지만, 해당 간격이 몇 달이나 차이나는지 계산하기 위해서는 매달 30일 또는 31일(2월이 포함되었다면 28일을 계산할 수도 있겠지요!)을 고려해서 나눗셈을 해야 하는데요, 이러한 불편함을 해결할 수 있는 패키지가 하나 있어서 소개해 드리려고 합니다.

     

     

    파이썬의 dateutil 패키지 중 relativedelta 모듈은 timedelta 를 조금 강화한 듯한 relativedelta 클래스를 제공합니다. 이 클래스는 연, 월, 일, 시, 분, 초, 마이크로초를 모두 표현할 수 있어서 시간의 단위에 따른 계산을 최소화할 수 있는 잗점이 있습니다.

     

     

    이번에는 1999년 4월 5일과 2005년 1월 1일 사이의 차이를 relativedelta 를 이용해 표현하는 예제를 보여드리겠습니다.

     

     

    from dateutil.relativedelta import relativedelta
    
    a = datetime(1999,4,5)
    b = datetime(2005,1,1)
    
    delta = relativedelta(a, b)

     

    delta
    relativedelta(years=-5, months=-8, days=-26)
    반응형

    댓글

문의: jwkang3929@naver.com