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

Python – Pandas에서 누락된 날짜 확인하는 방법

Pandas에서 누락된 날짜 확인하기

시계열 데이터를 다루다 보면 특정 기간 안에 비어 있는(누락된) 날짜를 찾아야 하는 경우가 자주 생깁니다. 이 글에서는 Pandas의 pd.date_range()difference() 메서드를 활용해 전체 날짜 범위에서 존재하지 않는 날짜를 손쉽게 추출하는 방법을 단계별로 알아보겠습니다.

1단계: 날짜 데이터 준비

먼저 구매일(Date of Purchase) 기록이 포함된 리스트 형태의 딕셔너리를 생성합니다. 여기서는 자동차 구매 데이터를 예로 들겠습니다.

# 리스트로 구성된 딕셔너리
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
     'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}

2단계: DataFrame 생성

위 딕셔너리를 바탕으로 DataFrame을 생성합니다.

dataFrame = pd.DataFrame(d)

3단계: 구매일을 인덱스로 설정

이후 날짜 비교를 위해 Date_of_purchase 열을 DataFrame의 인덱스로 지정합니다.

dataFrame = dataFrame.set_index('Date_of_purchase')

4단계: 문자열을 DateTime 객체로 변환

to_datetime() 함수를 사용해 문자열 형식의 날짜를 DateTime 객체로 변환해야 날짜 연산과 비교가 가능해집니다.

dataFrame.index = pd.to_datetime(dataFrame.index)

5단계: 누락된 날짜 추출

pd.date_range()로 시작일부터 종료일까지의 전체 날짜 범위를 생성한 뒤, difference() 메서드로 DataFrame 인덱스에 없는 날짜, 즉 누락된 날짜만 걸러냅니다.

k = pd.date_range(start="2020-10-10", end="2020-10-22").difference(dataFrame.index)

전체 예제 코드

지금까지의 과정을 하나로 합친 전체 코드는 다음과 같습니다.

import pandas as pd

# 리스트로 구성된 딕셔너리
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
     'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}

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

# Date_of_purchase를 인덱스로 설정
dataFrame = dataFrame.set_index('Date_of_purchase')

# to_datetime()으로 문자열을 DateTime 객체로 변환
dataFrame.index = pd.to_datetime(dataFrame.index)

# 범위 내 누락된 날짜 출력
print("\n날짜 범위에서 누락된 날짜 표시...")
k = pd.date_range(start="2020-10-10", end="2020-10-22").difference(dataFrame.index)

print(k)

실행 결과

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

DataFrame...
        Car   Date_of_purchase
0      BMW          2020-10-10
1     Lexus          2020-10-12
2      Audi          2020-10-17
3  Mercedes          2020-10-16
4    Jaguar          2020-10-19
5   Bentley          2020-10-22

날짜 범위에서 누락된 날짜 표시...
DatetimeIndex(['2020-10-11', '2020-10-13', '2020-10-14', '2020-10-15',
   '2020-10-18', '2020-10-20', '2020-10-21'],
   dtype='datetime64[ns]', freq=None)

핵심 정리

결과를 보면 2020년 10월 10일부터 22일 사이에서 실제 구매 기록이 없는 날짜인 10월 11일, 13일, 14일, 15일, 18일, 20일, 21일이 정확히 추출되었습니다.

이 기법의 핵심은 세 가지입니다.

  • 날짜 열을 반드시 인덱스로 설정하고 to_datetime()으로 변환할 것
  • pd.date_range()로 완전한 날짜 집합을 만들 것
  • difference()로 두 집합의 차집합을 구해 누락된 날짜를 얻을 것

이 방법은 결측치 분석, 일별 매출 데이터 검증, 센서 로그 점검 등 날짜 연속성이 중요한 모든 시계열 작업에 유용하게 활용할 수 있습니다.