HOWTO · Pandas
Pandas의 Datetime 열에서 월과 연도를 별도로 추출하는 방법
.dt 접근자를 사용해 Pandas datetime 열에서 연도와 월의 숫자 값을 추출하거나, strftime()으로 문자열로 서식을 지정하세요.
이 페이지의 내용
Series의 날짜/시간 접근자를 사용하면 연도와 월을 별도의 열로 추가할 수 있습니다. dates.dt.year와 dates.dt.month는 숫자형 구성 요소를 반환합니다. 원본 열에 날짜 문자열이 들어 있다면 .dt를 사용하기 전에 pandas.to_datetime으로 한 번 변환하세요. 월을 01처럼 표시하는 경우처럼 결과를 문자열로 사용하려면 strftime()을 선택하세요.
Series.dt.year와 Series.dt.month로 연도와 월 추출하기
.dt 접근자를 사용하면 Pandas Series에서 날짜/시간 속성을 가져올 수 있습니다. 특히 pandas.Series.dt.year와 pandas.Series.dt.month는 연도와 월을 숫자형 값으로 반환합니다. 이들은 메서드가 아니라 속성이므로 괄호를 붙이지 않습니다. Series의 year 참조 문서에서 연도 속성을 설명합니다.
값이 문자열이라면 pandas.to_datetime으로 입력 열을 변환하세요. 아래 예제는 ISO 날짜 문자열로 시작해 열을 변환한 뒤, 추출한 두 구성 요소를 각각 할당합니다. 날짜 문자열을 변환하고 숫자형 연도와 월 값을 할당한 다음 결과 DataFrame을 출력합니다.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.year
df["month"] = df["joined"].dt.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
열의 자료형이 이미 datetime이라면 변환 줄은 건너뛰고 두 속성을 바로 적용하면 됩니다. 날짜 문자열은 Pandas가 해석할 수 있는 형식이어야 합니다. 형식이 다른 문자열은 구성 요소를 추출하기 전에 정규화하거나 명시적으로 파싱하세요. 월 속성은 숫자형이므로 1월은 1로 표시되며, 정렬이나 숫자 비교에 유용합니다.
strftime()으로 연도와 월 형식 지정하기
숫자형 구성 요소가 아니라 형식이 지정된 문자열이 필요한 후속 코드에는 strftime()을 사용하세요. Series의 .dt 접근자에서 %Y는 네 자리 연도를, %m은 두 자리 월을 나타냅니다. 날짜가 2020-01-02라면 각각 2020과 01이라는 문자열이 됩니다.
이 예제에서는 앞과 같은 방식으로 입력을 변환한 뒤 문자열 열을 추가합니다. 월 문자열은 앞에 0이 붙은 형식을 유지하므로 레이블이나 연월 키에 유용합니다. 값이 문자열이므로 이후 계산이나 숫자 기준 정렬이 필요하면 숫자로 변환하세요.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.strftime("%Y")
df["month"] = df["joined"].dt.strftime("%m")
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 01
2 2020-02-05 2020 02
산술 연산이나 숫자 비교에 사용할 값이 필요하면 숫자형 .dt.year 및 .dt.month 속성을 사용하세요. 표시 형식이 중요하거나 01처럼 두 자리로 고정된 월이 필요하면 strftime()을 사용하면 됩니다. 두 방법 모두 자료형이 datetime인 값에 적용됩니다.
DatetimeIndex.year와 DatetimeIndex.month로 연도와 월 추출하기
날짜/시간 Series를 pandas.DatetimeIndex로 감싼 다음 year와 month 속성을 읽는 방법도 있습니다. DatetimeIndex 참조 문서에서 이 인덱스 유형을 설명합니다. 이 속성들은 Series 접근자와 마찬가지로 숫자형 구성 요소를 반환하며, 한 단계로 DataFrame 열에 할당할 수 있습니다.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
dates = pd.DatetimeIndex(df["joined"])
df["year"] = dates.year
df["month"] = dates.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
인덱스 객체가 작업 흐름에 적합하다면 DatetimeIndex를 사용하세요. 일반적인 Series 열에는 .dt 속성이 대체로 가장 직접적인 표현입니다. 두 방법은 숫자형 연도와 월 값을 만들고, strftime()은 문자열을 만듭니다. 어느 방법을 사용하든 먼저 원본의 자료형이 datetime인지 확인하세요. 이 예제는 날짜만 있는 문자열을 사용합니다. 타임스탬프에 시간대가 포함되어 있다면 의도한 시간대를 고려해야 합니다. 달력상의 연도와 월은 타임스탬프의 현지 날짜에 따라 달라지기 때문입니다.