Python

[Pandas] 날짜/시간 데이터 처리하기(to_datetime(), .dt, to_period)

주댕이 2024. 11. 18. 23:21

# to_datetime()

  • to_datetime()은 문자열이나 숫자 등 다양한 포맷의 데이터를 Pandas의 날짜/시간 형식(datetime64)으로 변환한다.
  • 날짜와 시간 데이터를 처리할 수 있다.
  • 데이터 형식을 자동적으로 추론하거나 명시적 형식을 지정할 수 있다.
  • 잘못된 형식의 데이터 처리 옵션을 제공한다.

## 날짜/시간 데이터 처리하기

import pandas as pd

dates = ["2023-01-01", "2023/02/01", "01-03-2023"]
pd.to_datetime(dates)
# 결과: DatetimeIndex(['2023-01-01', '2023-02-01', '2023-03-01'], dtype='datetime64[ns]', freq=None)

 

## 데이터 형식 지정하기

pd.to_datetime("01-02-2023", format="%d-%m-%Y")
# 결과: Timestamp('2023-02-01 00:00:00')

 

## 잘못된 데이터 처리하기

invalid_dates = ["2023-01-01", "invalid", "2023-01-03"]
pd.to_datetime(invalid_dates, errors="coerce")
# 결과: DatetimeIndex(['2023-01-01', 'NaT', '2023-01-03'], dtype='datetime64[ns]', freq=None)

 

 

# .dt 접근자

  • .dt는 Pandas 시리즈 또는 데이터프레임 열에서 datetime64 데이터 타입에 대한 속성/메서드를 제공하는 접근자이다.
  • 날짜, 시간, 주, 분기 등의 세부 정보를 추출하거나, 날짜 연산을 수행할 수 있다.

## 날짜/시간 정보 추출하기

  • .year, .month, .day: 연, 월, 일 추출
# 데이터 생성
df = pd.DataFrame({"dates": pd.to_datetime(["2023-01-01", "2023-02-01", "2023-03-01"])})

# 연, 월 추출
df["year"] = df["dates"].dt.year
df["month"] = df["dates"].dt.month
print(df)

# 결과:
#        dates  year  month
# 0 2023-01-01  2023      1
# 1 2023-02-01  2023      2
# 2 2023-03-01  2023      3
  • .hour, .minute, .second : 시간, 분, 초 추출
  • .dayofweek, .day_name(): 요일(0: 월요일), 요일 이름 추출
df["weekday"] = df["dates"].dt.day_name()
print(df)

# 결과:
#        dates  year  month    weekday
# 0 2023-01-01  2023      1     Sunday
# 1 2023-02-01  2023      2   Wednesday
# 2 2023-03-01  2023      3  Wednesday
  • .is_leap_year: 윤년 여부

## 날짜/시간 연산하기

  • .floor('freq'): 날짜/시간을 지정된 간격으로 내림
  • .ceil('freq'): 날짜/시간을 지정된 간격으로 올림
  • .round('freq'): 날짜/시간을 지정된 간격으로 반올림
time_series = pd.Series(pd.to_datetime(["2023-01-01 10:45:00", "2023-01-01 10:30:00"]))
time_series.dt.round("30min")

# 결과:
# 0   2023-01-01 10:30:00
# 1   2023-01-01 10:30:00

 

 

# to_period()

  • to_period()는 datetime 형식 데이터를 기간(period) 형식(PeriodIndex)으로 변환한다.
  • 기간 데이터는 특정 시간의 범위를 나타내며, 연, 월, 분기 등의 단위를 사용할 수 있다.
  • 날짜 데이터를 특정 단위(연도, 월, 분기 등)로 변환한다.
  • 시간 범위 연산 및 조작이 가능하다.

## 날짜 데이터를 연 단위로 변환하기

dates = pd.to_datetime(["2023-01-01", "2023-02-01", "2023-03-01"])
periods = dates.to_period("Y")
print(periods)

# 결과: PeriodIndex(['2023', '2023', '2023'], dtype='period[A-DEC]')

 

## 월 단위로 변환하기

periods_month = dates.to_period("M")
print(periods_month)

# 결과: PeriodIndex(['2023-01', '2023-02', '2023-03'], dtype='period[M]')

 

 

# to_datetime() vs .dt vs to_period()

기능 to_datetime() .dt 접근자 to_period()
목적 날짜/시간 데이터 변환 날짜/시간 세부 정보 추출 및 연산 특정 기간 단위로 변환
입력 데이터 문자열, 리스트, 시리즈 datetime64 데이터를 가진 시리즈/열 datetime64 데이터를 가진 시리즈/열
출력 데이터 datetime64 객체 연도, 월, 요일 등 정보 (int/str 등) PeriodIndex
예시 "2023-01-01" →
Timestamp('2023-01-01')
dt.year → 2023,
dt.day_name() → "Monday"
2023-01-01 →
Period('2023-01', 'M')

 

728x90