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

Pandas DataFrame으로 타임스탬프 생성하고 처리하는 방법

이 글에서는 파이썬의 대표적인 데이터 분석 라이브러리인 pandas를 활용해 다양한 타임스탬프를 생성하고 처리하는 방법을 알아봅니다. 타임스탬프 데이터를 만들고 가공하는 과정에서는 numpy 모듈도 함께 사용합니다.

권장 개발 환경: Jupyter Notebook

본 튜토리얼을 시작하기 전에 pandas와 numpy 라이브러리가 설치되어 있어야 합니다. 코드를 테스트하고 실행하기에는 Jupyter Notebook이 가장 적합한 환경입니다. pandas를 설치하려면 아래 명령어를 실행하세요.

>>> pip install pandas

이 명령어를 실행하면 필요한 모든 의존성 패키지가 자동으로 함께 설치됩니다. 설치가 완료된 후에는 변경 사항을 적용하기 위해 커널을 재시작해야 한다는 점을 잊지 마세요.

설치가 끝나면 pandas를 'p'라는 별칭으로 임포트하여 사용할 수 있습니다.

date_range()로 날짜 범위 생성하기

DataFrame 생성자를 호출한 뒤, 시작 날짜를 기준으로 4개의 시점(periods=4)과 3시간 간격(freq='3H')의 날짜 범위를 생성해 보겠습니다. 'time'이라는 키를 지정하면 해당 열을 손쉽게 출력할 수 있습니다.

>>> import pandas as p
>>> data_struct = p.DataFrame()
>>> data_struct['time'] = p.date_range('14/7/2019', periods = 4, freq='3H')
>>> print(data_struct['time'])
0   2019-07-14 00:00:00
1   2019-07-14 03:00:00
2   2019-07-14 06:00:00
3   2019-07-14 09:00:00
Name: time, dtype: datetime64[ns]

.dt 접근자를 사용하면 날짜와 관련된 다양한 특성을 추출할 수 있습니다. 예를 들어 data_struct['time'].dt.year처럼 <데이터프레임>.dt.<특성 이름> 형식으로 연도, 월, 일 등을 꺼낼 수 있으며, head() 메서드를 호출하면 데이터프레임의 상위 행들을 한눈에 확인할 수 있습니다.

>>> data_struct['year'] = data_struct['time'].dt.year
>>> data_struct.head(4)
                 time  year
0 2019-07-14 00:00:00  2019
1 2019-07-14 03:00:00  2019
2 2019-07-14 06:00:00  2019
3 2019-07-14 09:00:00  2019

시간 문자열을 DateTime 객체로 변환하기

numpy 모듈의 .array() 함수로 시간 문자열 배열을 만든 후, pandas의 .to_datetime() 메서드를 사용해 이를 DateTime 객체로 변환할 수 있습니다. format 인자에 '%d-%m-%Y %I:%M %p'를 지정하면 '일-월-연도 시:분 AM/PM' 형식의 문자열을 정확하게 해석하며, errors='coerce' 옵션은 변환에 실패하는 값을 NaT(Not a Time)로 안전하게 처리해 줍니다.

>>> import numpy as n
>>> dt_timestring = n.array(['14-07-2019 07:26 AM', '13-07-2019 11:01 PM'])
>>> timestamps = [p.to_datetime(date, format='%d-%m-%Y %I:%M %p', errors='coerce') for date in dt_timestring]
>>> print(timestamps)
[Timestamp('2019-07-14 07:26:00'), Timestamp('2019-07-13 23:01:00')]

날짜를 인덱스로 설정하기

.set_index() 메서드를 활용하면 'date' 필드를 데이터프레임의 인덱스로 지정할 수 있습니다. 이렇게 하면 특정 날짜를 기준으로 데이터를 빠르게 조회할 수 있어 시계열 데이터를 다룰 때 매우 유용합니다.

>>> data_struct1 = p.DataFrame()
>>> data_struct1['date'] = p.date_range('18/07/2019', periods = 5, freq ='2H')
>>> data_struct1 = data_struct1.set_index(data_struct1['date'])
>>> print(data_struct1.head(5))
                       date
date
2019-07-18 00:00:00 2019-07-18 00:00:00
2019-07-18 02:00:00 2019-07-18 02:00:00
2019-07-18 04:00:00 2019-07-18 04:00:00
2019-07-18 06:00:00 2019-07-18 06:00:00
2019-07-18 08:00:00 2019-07-18 08:00:00

조건에 맞는 데이터만 필터링하기

데이터프레임에서 특정 조건을 충족하는 데이터만 추출하고 싶다면 불리언 인덱싱을 활용하면 됩니다. 아래 예제는 '2019-07-17 04:00:00'보다 이후인 날짜만 골라내는 코드입니다.

>>> data_struct2 = p.DataFrame()
>>> data_struct2['date'] = p.date_range('17/07/2019', periods =3, freq ='4H')
>>> print(data_struct2.head(5))
                 date
0 2019-07-17 00:00:00
1 2019-07-17 04:00:00
2 2019-07-17 08:00:00
>>> inp = data_struct2[(data_struct2['date'] > '2019-07-17 04:00:00')]
>>> print(inp)
                 date
2 2019-07-17 08:00:00

마무리

이번 글에서는 pandas의 date_range(), .dt 접근자, to_datetime(), set_index() 등을 활용해 타임스탬프를 생성하고, 문자열을 변환하고, 인덱스를 설정하고, 조건에 맞게 필터링하는 다양한 방법을 살펴봤습니다. 이러한 기능들은 시계열 데이터 분석의 기초가 되므로, 직접 코드를 실행해 보며 익혀두면 실무에서 큰 도움이 될 것입니다.