- 과거내용
- DataFrame - 시간
1. 특정시간 필터링(1)
#원본 데이터
col1
2023-07-20 00:00:00 1
2023-07-20 03:00:00 2
2023-07-20 06:00:00 3
2023-07-20 09:00:00 4
2023-07-20 12:00:00 5
2023-07-20 15:00:00 6
2023-07-20 18:00:00 7
2023-07-20 21:00:00 8
2023-07-21 00:00:00 9
2023-07-21 03:00:00 10
#필터링
print(df.at_time('06:00'))
col1
2023-07-20 06:00:00 3
at_time을 사용해서 시간이 06:00인 것만
필터링되어 출력할 수 있게 했다.
2. 특정기간 필터링(2)
#원본 데이터
col1
2023-07-20 00:00:00 1
2023-07-20 03:00:00 2
2023-07-20 06:00:00 3
2023-07-20 09:00:00 4
2023-07-20 12:00:00 5
2023-07-20 15:00:00 6
2023-07-20 18:00:00 7
2023-07-20 21:00:00 8
2023-07-21 00:00:00 9
2023-07-21 03:00:00 10
#특정기간 필터링
print(df.between_time(start_time='00:00', end_time='03:00'))
col1
2023-07-20 00:00:00 1
2023-07-20 03:00:00 2
2023-07-21 00:00:00 9
2023-07-21 03:00:00 10
at_time과 다르게 between_time은 특정 구간에 속하는 데이터들을
모두 가져올 수 있다.
3. 특정기간 필터링(3)
#원본 데이터
col1
2023-06-20 1
2023-06-23 2
2023-06-26 3
2023-06-29 4
2023-07-02 5
2023-07-05 6
2023-07-08 7
2023-07-11 8
2023-07-14 9
2023-07-17 10
#시작
print(df.first('4D'))
col1
2023-06-20 1
2023-06-23 2
#끝
print(df.last('4D'))
col1
2023-07-14 9
2023-07-17 10
first는 기준일부터 4일 범위까지를 출력하고,
last는 기준일부터 4일 전 범위까지를 출력하게 설정했다.
4D는 4개의 일이 나오는 것이 아닌 범위를 뜻한다.
4. 타임존 변경
#원본 데이터
us
2023-06-20 00:00:00+09:00 0
2023-06-20 02:00:00+09:00 0
2023-06-20 04:00:00+09:00 0
2023-06-20 06:00:00+09:00 0
2023-06-20 08:00:00+09:00 0
#타임존 변경
x = pd.date_range('2023-06-20',periods=5, freq='2H',tz='Asia/Seoul')
data=x.tz_convert('US/Eastern')
df=pd.DataFrame({'us':data}, index=x)
us
2023-06-20 00:00:00+09:00 2023-06-19 11:00:00-04:00
2023-06-20 02:00:00+09:00 2023-06-19 13:00:00-04:00
2023-06-20 04:00:00+09:00 2023-06-19 15:00:00-04:00
2023-06-20 06:00:00+09:00 2023-06-19 17:00:00-04:00
2023-06-20 08:00:00+09:00 2023-06-19 19:00:00-04:00
tz_convert를 통해 타임존을 seoul에서 eastern으로 바꾸었다.
그 결과 +09에서 -04가 된 것을 확인할 수 있다.
5. 타임존 설정
#원본 데이터
x = pd.date_range('2023-06-20 09:00',periods=5, freq='2H')
us
2023-06-20 09:00:00 0
2023-06-20 11:00:00 0
2023-06-20 13:00:00 0
2023-06-20 15:00:00 0
2023-06-20 17:00:00 0
#타임존 설정
x= x.tz_localize('US/Eastern')
us
2023-06-20 09:00:00-04:00 0
2023-06-20 11:00:00-04:00 0
2023-06-20 13:00:00-04:00 0
2023-06-20 15:00:00-04:00 0
2023-06-20 17:00:00-04:00 0
원본 데이터가 타임존이 설정되어 있지 않기에 tz_convert를 사용해서
타임존을 바꿀 수가 없다. 그렇기에 tz_localize를 통해 타임존을 초기설정 해줘야 한다.
이후 tz_convert를 사용해서 타임존을 바꿀 수 있다.
6. 타임스탬프 변환
#원본 데이터
0
2023-07-19 00:00 0
2023-07-19 00:30 1
2023-07-19 01:00 2
#타임스탬프 변환
print(df.to_timestamp(freq="T", how='start'))
0
2023-07-19 00:00:00 0
2023-07-19 00:30:00 1
2023-07-19 01:00:00 2
to_timestampe를 사용해서 시간이 표기되는 형식을 바꾼다.
freq에 옵션을 어떻게 주느냐에 따라 시간이 표기되는 형식이 바뀐다.
7. 인덱스 나누기
#원본 데이터
0
2023-06-20 00:00:00 0.0
2023-06-20 00:01:00 NaN
2023-06-20 00:02:00 2.0
#인덱스 나누기
print(df.asfreq(freq='30S',method='bfill'))
0
2023-06-20 00:00:00 0.0
2023-06-20 00:00:30 NaN
2023-06-20 00:01:00 NaN
2023-06-20 00:01:30 2.0
2023-06-20 00:02:00 2.0
asfreq를 통해서 인덱스를 나눌 수 있다.
30초 단위로 추가로 나누고, 빈 값은 bfill 형태로 채워넣는다.
8. 리샘플링
#원본 데이터
0
2023-06-20 00:00:00 0
2023-06-20 00:01:00 1
2023-06-20 00:02:00 2
2023-06-20 00:03:00 3
2023-06-20 00:04:00 4
2023-06-20 00:05:00 5
2023-06-20 00:06:00 6
2023-06-20 00:07:00 7
2023-06-20 00:08:00 8
2023-06-20 00:09:00 9
#리샘플링
print(df.resample(rule='3T',label='left').sum())
0
2023-06-20 00:00:00 3
2023-06-20 00:03:00 12
2023-06-20 00:06:00 21
2023-06-20 00:09:00 9
resample을 통해 리샘플링한다. rule은 리샘플링할 기준을 말한다.
위는 3분을 기준으로 했다. label은 첫번째 값이 어떤 것을 오게할 것인지 선택할 수 있다.
이외에도 closed, kind, offset, on, origin 등의 옵션이 있다.
9. 옮기기
#원본 데이터
col1 col2
2023-06-20 0 0
2023-06-21 1 0
2023-06-22 2 0
2023-06-23 3 0
2023-06-24 4 0
#옮기기
print(df.shift(periods=1,axis=1))
col1 col2
2023-06-20 NaN 0
2023-06-21 NaN 1
2023-06-22 NaN 2
2023-06-23 NaN 3
2023-06-24 NaN 4
shift를 사용해 행 또는 열로 이동시킬 수 있다.
위의 경우는 1칸을 오른쪽으로 민 경우이다.
10. period 변환
#원본 데이터
x = pd.date_range('2023-06-20',periods=5, freq='D')
col1 col2
2023-06-20 0 0
2023-06-21 1 0
2023-06-22 2 0
2023-06-23 3 0
2023-06-24 4 0
#period 변환
print(x.to_period("D"))
PeriodIndex(['2023-06-20', '2023-06-21', '2023-06-22', '2023-06-23',
'2023-06-24'],
dtype='period[D]')
to_period를 통해서 period로 변환한다.
년, 월, 일 등 다양한 형식으로 변환하여 원하는 간격으로 출력할 수 있다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
EDA - 1단계 : 데이터 다루기 - 변환 (1) | 2023.07.23 |
---|---|
EDA - 1단계 : 데이터 다루기 - 멀티인덱스, 반복 (1) | 2023.07.22 |
EDA - 1단계 : 데이터 다루기 - 통계(2) (2) | 2023.07.19 |
EDA - 1단계 : 데이터 다루기 - 통계 (2) | 2023.07.18 |
EDA - 1단계 : 데이터 다루기 - 축, 레이블 (3) | 2023.07.17 |