이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
날짜와 시간 데이터 다루기
데이터 분석을 하다 보면 날짜와 시간 데이터를 다루어야 하는 경우가 자주 있습니다. 예를 들어, 데이터프레임의 컬럼에 연, 월, 일과 같은 데이터가 들어가 있을 수도 있고, 시, 분, 초와 같은 데이터가 들어가 있을 수도 있습니다. 날짜와 시간 데이터를 효과적으로 다루기 위해서는 데이터 타입을 적절하게 설정하는 것이 중요합니다.
날짜와 시간을 위한 데이터 타입 설정하기
문자열로 저장된 날짜와 시간 데이터를 pandas에서 제공하는 to_datetime 함수를 사용하여 datetime 타입으로 변환할 수 있습니다.
이렇게 하면 날짜와 시간을 편리하게 다룰 수 있으며, 년도, 월, 일, 시간 등을 쉽게 추출하거나 원하는 시간만큼 더하고 뺄 수 있습니다.
# 날짜와 시간을 위한 데이터 타입으로 변경하기
df['time_column_name'] = pd.to_datetime(df['time_column_name'])
# 데이터를 불러오는 동시에 날짜와 시간 데이터의 타입을 변경하기
pd.read_csv("data/anything.csv", parse_dates=['time_column_name_1', 'time_column_name_2'])
# 날짜와 시간을 위한 데이터에서 날짜(년,월,일)만 추출하기
df['time_column_name'].dt.date # dt는 시간 타입의 시리즈에 접근하는 역할을 해준다.
# 날짜와 시간을 위한 데이터에서 년도 추출하기
df['time_column_name'].dt.year
# 날짜와 시간을 위한 데이터에서 월 추출하기
df['time_column_name'].dt.month
# 날짜와 시간을 위한 데이터에서 일 추출하기
df['time_column_name'].dt.day
# 날짜와 시간을 위한 데이터에서 요일 추출하기
df['time_column_name'].dt.dayofweek # 요일이 숫자값으로 출력되며 0~6까지의 숫자가 출력됨 (0이 월요일, 6이 일요일)
날짜와 시간을 위한 데이터 타입으로 변경하기 | pd.to_datetime(df['column_name']) |
날짜와 시간을 위한 데이터에서 날짜 추출하기 | df['column_name'].dt.date |
날짜와 시간을 위한 데이터에서 년도 추출하기 | df['column_name'].dt.year |
날짜와 시간을 위한 데이터에서 월 추출하기 | df['column_name'].dt.month |
날짜와 시간을 위한 데이터에서 일 추출하기 | df['column_name'].dt.day |
날짜와 시간을 위한 데이터에서 요일 추출하기 | df['column_name'].dt.dayofweek |
날짜와 시간 데이터 인덱싱하기
특정 날짜와 시간 데이터를 인덱싱을 통해 확인하려면 먼저 날짜와 시간 데이터를 인덱스로 설정할 필요가 있습니다.
이렇게 하면 데이터프레임을 날짜와 시간 기준으로 쉽게 정렬하고 조회할 수 있습니다.
# 날짜와 시간 데이터 인덱스로 설정하기
df = df.set_index('time_column_name')
# 인덱스로 설정된 날짜와 시간 데이터를 오름차순으로 정렬하기
df = df.set_index('time_column_name').sort_index
# 날짜와 시간 데이터를 인덱스로 설정해놓은 경우 간단히 년도나 월, 일 데이터들을 인덱싱할 수 있다.
# 2017년의 데이터만 인덱싱하기
df.loc['2017']
# 2017년 3월의 데이터만 인덱싱하기
df.loc['2017-03']
# 2017년 3월 5일의 데이터만 인덱싱하기
df.loc['2017-03-05']
# 2017년부터 2019년까지의 데이터 인덱싱하기
df.loc['2017':'2019']
날짜와 시간을 더하고 빼기
timedelta 객체를 사용하면 날짜와 시간 데이터를 더하거나 뺄 수 있습니다.
timedelta는 Python의 datetime 모듈에서 제공하는 클래스로, 두 datetime 객체 간의 차이를 나타내거나 일정한 시간 간격을 더하거나 뺄 때 사용됩니다.
날짜와 시간을 더하고 빼기 위한 방법에는 timedelta라는 형태로 만들어야만 더하거나 빼기를 할 수 있습니다.
timedelta 객체 생성
timedelta 객체는 다음과 같은 파라미터를 사용하여 생성할 수 있습니다.
- days
- seconds
- microseconds
- milliseconds
- minutes
- hours
- weeks
from datetime import timedelta
# 2일과 3시간을 나타내는 timedelta 객체 생성
delta = timedelta(days=2, hours=3)
print(delta)
timedelta를 이용해 날짜와 시간을 더하고 빼기
# 날짜와 시간 더하기
# 현재 날짜와 시간
now = datetime.now()
# 5일을 더하는 timedelta 객체
delta_1 = timedelta(days=5)
# 현재 날짜에 5일 더하기
new_date_1 = now + delta_1
# 날짜와 시간 빼기
# 3시간 빼는 timedelta 객체
delta_2 = timedelta(hours=3
# 현재 날짜에서 3시간 빼기
new_date_2 = now - delta_2
# 추가) timedelta를 이용한 날짜와 시간 데이터 변환하기
df['days_for_plus'] = pd.to_timedelta(df['days_for_plus'], unit="D")
# 유닛을 지정하지 않을 경우에 timedelta는 나노초까지의 결과까지 출력한다.
Pandas DataFrame에서 timedelta를 사용하는 전체 예시
data = {
'date': ['2023-01-01', '2023-02-01', '2023-03-01'],
'time': ['10:00:00', '15:30:00', '23:45:00']
}
df = pd.DataFrame(data)
# 문자열을 datetime 객체로 변환
df['date'] = pd.to_datetime(df['date'])
df['time'] = pd.to_datetime(df['time']).dt.time
# 날짜와 시간을 합친 datetime 컬럼 생성
df['datetime'] = df.apply(lambda row: datetime.combine(row['date'], row['time']), axis=1)
# 2일과 3시간을 더하는 timedelta 객체
delta = timedelta(days=2, hours=3)
# datetime 컬럼에 timedelta 더하기
df['datetime_plus'] = df['datetime'] + delta
# datetime 컬럼에서 1일과 2시간을 빼는 timedelta 객체
delta_minus = timedelta(days=1, hours=2)
# datetime 컬럼에서 timedelta 빼기
df['datetime_minus'] = df['datetime'] - delta_minus
이번 글에서는 날짜와 시간 데이터 다루기 / 날짜와 시간을 위한 데이터 타입 설정하기 / 날짜와 시간을 인덱싱하기 / 날짜와 시간을 더하고 빼기가 포함된 내용을 정리했으며, 파이썬에서 데이터 분석을 하거나 프로그래밍을 하는 사람들에게 알아두면 유용한 개념들로 이번 기회를 통해 다른 분들도 정리하면 좋을 것 같습니다.
글 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 'DataFrame 마스터하기' https://www.codeit.kr/topics/mastering-dataframe
'프로그래밍 언어 > Python' 카테고리의 다른 글
[파이썬 개념 정리 16] Pandas의 DataFrame 마스터하기 6️⃣ (그룹별로 분석하기) (0) | 2024.08.01 |
---|---|
[파이썬 개념 정리 15] Pandas의 DataFrame 마스터하기 5️⃣ (데이터 합치기) (0) | 2024.08.01 |
[파이썬 개념 정리 13] Pandas의 DataFrame 마스터하기 3️⃣ (문자 데이터 가공하기, 숫자 데이터 가공하기) (0) | 2024.07.29 |
[파이썬 개념 정리 12] Pandas의 DataFrame 마스터하기 2️⃣ (데이터 전처리) (0) | 2024.07.28 |
[파이썬 개념 정리 11] Pandas의 DataFrame 마스터하기 1️⃣ (DataFrame의 기본) (0) | 2024.07.28 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!