# 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
'Python' 카테고리의 다른 글
[Pandas] 데이터 필터링: isin vs contains (0) | 2024.11.18 |
---|---|
[Pandas] 날짜/시간의 차이 (timedelta) (0) | 2024.11.18 |
[Pandas] 데이터프레임의 행/열/데이터 개수 세기 (0) | 2024.11.18 |
[Python] enumerate() (4) | 2024.11.14 |
[Pandas] apply lambda 식으로 데이터 가공하기 (0) | 2024.02.19 |