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

Pandas로 Python 타임스탬프 비교하기 – 기본부터 전체 데이터 비교까지

Pandas에서 두 개의 타임스탬프(Timestamp)를 비교하려면 인덱스 연산자, 즉 대괄호([])를 활용하면 됩니다. 먼저 필요한 라이브러리를 임포트합니다.

import pandas as pd

1. 예제용 DataFrame 생성하기

이번 예제에서는 3개의 열을 가진 DataFrame을 만들어 보겠습니다. 자동차 이름(Car), 구매일(Date_of_Purchase), 정비일(Date_of_Service) 정보를 담고 있으며, 각 날짜는 pd.Timestamp()로 생성합니다.

dataFrame = pd.DataFrame(
    {
        "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

        "Date_of_Purchase": [
            pd.Timestamp("2021-06-10"),
            pd.Timestamp("2021-07-11"),
            pd.Timestamp("2021-06-25"),
            pd.Timestamp("2021-06-29"),
            pd.Timestamp("2021-03-20"),
        ],

        "Date_of_Service": [
            pd.Timestamp("2021-11-10"),
            pd.Timestamp("2021-12-11"),
            pd.Timestamp("2021-11-25"),
            pd.Timestamp("2021-11-29"),
            pd.Timestamp("2021-08-20"),
        ]
    }
)

2. 특정 행의 타임스탬프 비교하기

두 날짜 열에서 특정 위치의 값끼리 비교하려면 대괄호 안에 인덱스 번호를 지정하면 됩니다. 아래 코드는 첫 번째 행(인덱스 0)과 두 번째 행(인덱스 1)의 구매일과 정비일 차이를 계산합니다.

timestamp1_diff = abs(dataFrame['Date_of_Purchase'][0] - dataFrame['Date_of_Service'][0])
timestamp2_diff = abs(dataFrame['Date_of_Purchase'][1] - dataFrame['Date_of_Service'][1])

여기서 abs() 함수를 사용한 이유는 날짜 차이가 음수가 되지 않도록 절댓값으로 변환하기 위함입니다. 결과는 일(day) 단위의 Timedelta 객체로 반환됩니다.

3. 모든 타임스탬프 한 번에 비교하기

행마다 하나씩 계산할 필요 없이, 열 전체를 서로 빼주면 모든 행의 날짜 차이를 한 번에 구할 수 있습니다.

timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])

전체 예제 코드

지금까지 설명한 내용을 하나로 합친 완성된 코드는 다음과 같습니다.

import pandas as pd

# 3개의 열을 가진 DataFrame 생성
dataFrame = pd.DataFrame(
    {
        "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

        "Date_of_Purchase": [
            pd.Timestamp("2021-06-10"),
            pd.Timestamp("2021-07-11"),
            pd.Timestamp("2021-06-25"),
            pd.Timestamp("2021-06-29"),
            pd.Timestamp("2021-03-20"),
        ],

        "Date_of_Service": [
            pd.Timestamp("2021-11-10"),
            pd.Timestamp("2021-12-11"),
            pd.Timestamp("2021-11-25"),
            pd.Timestamp("2021-11-29"),
            pd.Timestamp("2021-08-20"),
        ]
    }
)

print("DataFrame...\n", dataFrame)

# 특정 행의 타임스탬프 비교
timestamp1_diff = abs(dataFrame['Date_of_Purchase'][0] - dataFrame['Date_of_Service'][0])
timestamp2_diff = abs(dataFrame['Date_of_Purchase'][1] - dataFrame['Date_of_Service'][1])
print("\n첫 번째 차량의 구매일과 정비일 차이\n", timestamp1_diff)
print("\n두 번째 차량의 구매일과 정비일 차이\n", timestamp2_diff)

# 전체 행의 타임스탬프 차이 계산
timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])
print("\n두 타임스탬프 간의 차이:\n", timestamp_diff)

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

DataFrame...
         Car  Date_of_Purchase  Date_of_Service
0      Audi        2021-06-10       2021-11-10
1     Lexus        2021-07-11       2021-12-11
2     Tesla        2021-06-25       2021-11-25
3  Mercedes        2021-06-29       2021-11-29
4       BMW        2021-03-20       2021-08-20

첫 번째 차량의 구매일과 정비일 차이
153 days 00:00:00

두 번째 차량의 구매일과 정비일 차이
153 days 00:00:00

두 타임스탬프 간의 차이:
0   153 days
1   153 days
2   153 days
3   153 days
4   153 days
dtype: timedelta64[ns]

정리

이처럼 Pandas에서는 대괄호 인덱싱만으로 손쉽게 타임스탬프를 추출하고 비교할 수 있습니다. 두 Timestamp 객체를 빼면 timedelta64[ns] 타입의 시간 차이가 계산되며, abs()를 함께 사용하면 항상 양수인 기간을 얻을 수 있습니다. 이 방법은 구매일과 정비일처럼 두 날짜 사이의 경과 기간을 분석할 때 매우 유용하게 활용됩니다.