- 본 게시물에서는 시간과 관련된 데이터셋을 다루는 방법에 대해 알아본다. 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시간만 바꾸었음
'데이터 분석 > Pandas' 카테고리의 다른 글
[Pandas 핵심] 5. 조건필터, 결측치 확인, 값 변경, 내장함수, 그룹핑, apply함수(w. lambda) (0) | 2023.10.25 |
---|---|
[Pandas 핵심] 4. 인덱싱/슬라이싱, 정렬 (2) | 2023.10.22 |
[Pandas 핵심] 3. 데이터프레임 변경/삭제, csv로 저장하기/불러오기 (2) | 2023.10.20 |
[Pandas 핵심] 2. 탐색적 데이터 분석 (EDA) 시 활용 함수들 (0) | 2023.10.17 |
[Pandas 핵심] 1. DataFrame과 Series (0) | 2023.10.17 |