판다스를 통한 시계열데이터 다루기

2 minute read

datetime 라이브러리는 날짜를 처리하는 time 오브젝트, 시간을 처리하는 time 오브젝트, 날짜와 시간을 모두 처리하는 datetime오브젝트 등을 포함하고 있습니다.

1. now(), today(),datetime(),timedelta

from datetime import datetime

datetime.now() #두 메소드 모두 현재 시간을 표현해줍니다.
datetime.today()
2020-02-27 09:58:11.262434
        
t1 = datetime(2021, 2, 27) #입력 시간을 바탕으로 datetime 오브젝트를 생성합니다.
t2 = datetime(2021, 2, 21, 11, 11, 11)        
        
  
diff1 = t1 - t2 #datetime 오브젝트는 시간계산을 할 수 있습니다.

print(diff1)
print(type(diff1))
5 days, 12:48:49
<class 'datetime.timedelta'> # datetime.timedelta라는 독특한 객체를 생성합니다.

2. to_datetime() (str데이터를 datetime object로 변환)

time_date = pd.DataFrame( {
    'time' : ['2020-02-01','2020-02-02','2020-02-03','2020-02-04','2020-02-05','2020-02-06']
})

time_date
	time
0	2020-02-01
1	2020-02-02
2	2020-02-03
3	2020-02-04
4	2020-02-05
5	2020-02-06

# 문자열이 time 칼럼을 datetime 객체로 변환한 'time_datetime'컬럼을 생성합니다.
time_date['time_datetime']= pd.to_datetime(time_date['time'])

	time	time_datetime
0	2020-02-01	2020-02-01
1	2020-02-02	2020-02-02
2	2020-02-03	2020-02-03
3	2020-02-04	2020-02-04
4	2020-02-05	2020-02-05
5	2020-02-06	2020-02-06

# 두 칼럼은 동일하게 생긴거 같아도 데이터 형태가 다릅니다. 
time_date.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 2 columns):
time             6 non-null object
time_datetime    6 non-null datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 224.0+ bytes
    
# 만약 문자열의 형태가 익숙한 형태가 아니라면, to_datetime의 format속성을 사용하면 됩니다. 
time_date2 = pd.DataFrame( {
    'time2' : ['01/02/20','20/02/02','20/02/03']
})

time_date2
	time2
0	01/02/20
1	20/02:02
2	20-02-03

time_date2['date_1'] = pd.to_datetime(time_date2['time2'], format='%d/%m/%y')
time_date2['date_2'] = pd.to_datetime(time_date2['time2'], format='%m/%d/%y')
time_date2['date_3'] = pd.to_datetime(time_date2['time2'], format='%y/%m/%d')

time_date2 #format의 형식에 따라 데이터가 다르게 입력된 것을 확인하실 수 있습니다. 
	time2		date_1		date_2		date_3
0	01/02/05	2005-02-01	2005-01-02	2001-02-05
1	05/02/02	2002-02-05	2002-05-02	2005-02-02
2	05/02/03	2003-02-05	2003-05-02	2005-02-03 

3. read_csv에서 파일을 읽을 때. datetime object로 변환

pd.read.csv('[파일 경로]',parse_dates=['바꿀 컬럼명'])
ebola = ebola=pd.read_csv('https://raw.githubusercontent.com/mindcompass/data_sets/master/country_timeseries.csv' ,parse_dates=['Date'])

ebola.info(0)
Date                   122 non-null datetime64[ns] 
# 'Date을 읽을 때 datetime객체로 읽은 것을 알 수 있습니다.'

4. 날짜 정보 추출하기

# 시계열 데이터를 구분해서 추출하고 싶으면 strftime()를 사용하면 됩니다. 
now = datetime.now()
now
2020-02-27 11:03:21.907462
        
nowDate = now.strftime('%Y-%m-%d')
nowDate
2018-08-27

nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
nowDatetime
2018-08-27 17:10:51
        
# serises에서 날짜를 가지고 오려면 year, month, day속성을 사용합니다.
date_series = pd.Series(['2020-02-01', '2020-02-02', '2020-02-03'])
date1 = pd.to_datetime(date_series) 
date1
0   2020-02-01
1   2020-02-02
2   2020-02-03
dtype: datetime64[ns]
    
date1[0].year
2020

date1[1].month
2

date1[2].day
3

# 위 방법은 데이터프레임에서도 사용 가능합니다.
ebola=pd.read_csv('https://raw.githubusercontent.com/mindcompass/data_sets/master/country_timeseries.csv' ,parse_dates=['Date'])
ebola['Date'][0].year 
2015 #0번째 행의 Date 자료의 year을 추출함

# 하지만 위 방법은 인덱스로 접근하기 때문에 전체 열에 적용하려면 for문 같은 반복문을 사용해야 합니다.
# 동시에 열에 모두 적용시키기 위해서는 dt접근자로 작업합니다. 

ebola['year'] = ebola['Date'].dt.year
ebola['month'] = ebola['Date'].dt.month
ebola['day'] = ebola['Date'].dt.day

ebola[['Date', 'year','month','day']].head()
	Date	year	month	day
0	2015-01-05	2015	1	5
1	2015-01-04	2015	1	4
2	2015-01-03	2015	1	3
3	2015-01-02	2015	1	2
4	2014-12-31	2014	12	31


Leave a comment