Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – 두 날짜 사이의 DataFrame 행 필터링하는 방법

Pandas DataFrame에서 두 날짜 사이에 해당하는 행만 추출하고 싶다면 dataframe.loc 속성과 비교 연산자를 조합하면 됩니다. 먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

날짜 기록을 담은 딕셔너리(리스트 값 형태)를 생성합니다.

d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
     'Date_of_Purchase': ['2021-07-10', '2021-08-12', '2021-06-17', '2021-03-16', '2021-02-19', '2021-08-22']
    }

위 딕셔너리를 이용해 DataFrame을 생성합니다.

dataFrame = pd.DataFrame(d)

이제 두 날짜, 즉 시작일 2021-05-10부터 종료일 2021-08-25 사이에 구매된 차량만 조회해 보겠습니다.

resDF = dataFrame.loc[(dataFrame["Date_of_Purchase"] >= "2021-05-10") & (dataFrame["Date_of_Purchase"] <= "2021-08-25")]

전체 예제 코드

아래는 지금까지 설명한 내용을 모두 담은 전체 코드입니다.

import pandas as pd

# 리스트 값을 가지는 딕셔너리 생성
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
     'Date_of_Purchase': ['2021-07-10', '2021-08-12', '2021-06-17', '2021-03-16', '2021-02-19', '2021-08-22']
    }

# 딕셔너리로 DataFrame 생성
dataFrame = pd.DataFrame(d)
print("DataFrame...\n", dataFrame)

# 두 날짜 사이에 구매한 차량 조회
# 첫 번째 날짜: 2021-05-10
# 두 번째 날짜: 2021-08-25
resDF = dataFrame.loc[(dataFrame["Date_of_Purchase"] >= "2021-05-10") & (dataFrame["Date_of_Purchase"] <= "2021-08-25")]

# 필터링된 DataFrame 출력
print("\n두 날짜 사이에 구매한 차량:\n", resDF)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

DataFrame...
         Car   Date_of_Purchase
0        BMW          2021-07-10
1       Lexus          2021-08-12
2        Audi          2021-06-17
3    Mercedes          2021-03-16
4      Jaguar          2021-02-19
5     Bentley          2021-08-22

두 날짜 사이에 구매한 차량:
        Car  Date_of_Purchase
0       BMW         2021-07-10
1      Lexus         2021-08-12
2       Audi         2021-06-17
5    Bentley         2021-08-22

추가 팁: 날짜 비교 시 주의사항

날짜 문자열이 'YYYY-MM-DD' 형식이라면 문자열 그대로 비교해도 사전순 정렬과 날짜순 정렬이 일치하므로 올바르게 동작합니다. 하지만 서로 다른 날짜 형식이 섞여 있는 데이터라면 pd.to_datetime()으로 해당 열을 datetime 타입으로 변환한 뒤 필터링하는 것이 안전합니다.

# Date_of_Purchase 열을 datetime 타입으로 변환
dataFrame['Date_of_Purchase'] = pd.to_datetime(dataFrame['Date_of_Purchase'])

# 마스크(mask)를 만들어 필터링
mask = (dataFrame['Date_of_Purchase'] >= '2021-05-10') & (dataFrame['Date_of_Purchase'] <= '2021-08-25')
resDF = dataFrame.loc[mask]