본문 바로가기

데이터 분석/Pandas

[Pandas 핵심] 6. 시계열데이터 다루기 (Datetime, Timedelta)

- 본 게시물에서는 시간과 관련된 데이터셋을 다루는 방법에 대해 알아본다. Pandas에는 특정 시점의 날짜와 시간을 다루는 Datetime 함수와 두 시점의 차이를 다루는 Timedelta 함수 등이 있다.

- 실습환경 : colab


 

실습에 활용할 데이터프레임 df 생성

 

import pandas as pd
data = {
    'Date1': ['2024-02-17', '2024-02-18', '2024-02-19'],
    'Date2': ['2024:02:17', '2024:02:18', '2024:02:19'],
    'Date3': ['24/02/17', '24/02/18', '24/02/19'],
    'Date4': ['02/17/2024', '02/18/2024', '02/19/2024'],
    'Date5': ['17-Feb-2024', '18-Feb-2024', '19-Feb-2024'],
    'Date6': ['2024년02월17일', '2024년02월18일', '2024년02월19일'],
    'DateTime1': ['24-02-17 11:45:30', '24-02-18 12:55:45', '24-02-19 13:30:15'],
    'DateTime2': ['2024-02-17 11-45-30', '2024-02-18 12-55-45', '2024-02-19 13-30-15'],
    'DateTime3': ['02/17/2024 11:45:30 AM', '02/18/2024 12:55:45 PM', '02/19/2024 01:30:15 PM'],
    'DateTime4': ['17 Feb 2024 11:45:30', '18 Feb 2024 12:55:45', '19 Feb 2024 13:30:15']
}

df = pd.DataFrame(data)
df.to_csv("date.csv", index=False) # 추후 재활용을 위해 colab상에 파일로 생성한다.
df = pd.read_csv("date.csv")
df

 

 



#1 Datetime

 

pd.to_datetime()

 

> pd.to_datetime()으로 자료형 변경

 

- pd.to_datetime(df['col']) : 'col'의 컬럼의 데이터타입을 datetime으로 변경한다.

- pd.to_datetime(df['col'],  format = "%Y%m%d")
  :
어떤식으로 기존의 데이터가 생겼든( , format = "~")으로 기존에 Y-m-d형태가 아닌 데이터를 datetime으로 바꾼다.
  : format의 형태는 기존 데이터의 형태에 따라 다르다.
     → %Y : yyyy 형태의 연도, %y : yy형태의 연도, %b : Feb 등 '월'의 약어

- 단일 컬럼인 시리즈만 적용 가능

- 에러가 안난다고 해도 정상적으로 변환이 안되었을 수도 있으니 주의할 것

 

> 기본형태

 

 

> Format으로 비정형화된 연/월/일 형태를 인식한 후 datetime으로 변경 

 

 

 

 

 

 

> Format으로 비정형화된 연/월/일 부터 시/분/초까지의 형태를 인식한 후 datetime으로 변경 

 

 

 

 

 

 

시간 추출하기 : df['col'].dt.year/~/second 

 

- datetime 중 일부분 추출하기

- df['col'].dt.~로 년/월/일/시간/분/초 추출

 

# 년, 월, 일, 시간, 분, 초 추출
df['year'] = df['DateTime4'].dt.year
df['month'] = df['DateTime4'].dt.month
df['day'] = df['DateTime4'].dt.day
df['hour'] = df['DateTime4'].dt.hour
df['minute'] = df['DateTime4'].dt.minute
df['second'] = df['DateTime4'].dt.second
df

 

 

 

df['col'].dt.dayofweek : 요일 추출

 

 

 

 

to_period()

 

 

#2 Timedelta

 

  • Timedelta : 두 시점의 차이로 연산이 된 데이터로, 이렇게 연산이 되는 즉시 data type이 timedelta로 변경

 

실습 데이터 준비

 

 

  • parse_dates : datetime형태로 바로 바꾸기

 

pd.Timedelta(days=99) : 99일 이후 = 100일 째 되는 날

 

 

pd.Timedelta(hours=100) : 100시간 이후

 

 

시간 연산하는 예시

 

# 시간 +/- (3주, 3일, 3시간, 3분, 3초 이전과 이후)
diff = pd.Timedelta(weeks=3, days=3, hours=3, minutes=3, seconds=3)
df['+diff'] = df['DateTime4'] + diff
df['-diff'] = df['DateTime4'] - diff
df

 

 

# timedelta 자료형(datetime간의 연산 결과)
diff = df['100일'] - df['100시간']
diff

 

 

시간 추출하기 1, total_seconds() : 기간을 초로 변환 (※ '분/시간/일'로 변환은 나눗셈으로) 

 

- total_seconds는 TimeDelta에만 적용이 가능하다.

 

# 기간을 초로 변환 total_seconds()
print(diff.dt.total_seconds()) #초
print(diff.dt.total_seconds()/60) #분
print(diff.dt.total_seconds()/60/60) #시간
print(diff.dt.total_seconds()/60/60/24) #일

 

 

 

시간 추출하기 2, ~dt.days/seconds

 

 

- diff.dt.seconds는 위의 total_seconds과는 달리 94일은 제외하고 20시간만 바꾸었음