시계열 데이터를 만들어보자
옵션
-----------------------------------------------------------------------
- start : 시작 날짜
- end : 종료 날짜
- periods : Timestamp 개수
- freq : 빈도(월 간격, 월 시작일 등)
- tz : 시간 기준
# Timestamp 배열 = range()
sd_ts = pd.date_range(start = "2022-01-01", # 시작 날짜
end = None, # 끝 날짜
periods = 12, # Timestamp 개수
freq = 'MS', # 월 간격, 월 시작일
tz = 'Asia/Seoul')
print(sd_ts)
sd_ts = pd.date_range(start = "2022-01-01", # 시작 날짜
end = None, # 끝 날짜
periods = 12, # Timestamp 개수
freq = 'M', # 월 간격, 월 마지막일
tz = 'Asia/Seoul')
print(sd_ts)
sd_ts = pd.date_range(start = "2022-01-01", # 시작 날짜
end = None, # 끝 날짜
periods = 12, # Timestamp 개수
freq = '3M', # 3개월 간격, 월 마지막일
tz = 'Asia/Seoul')
print(sd_ts)
freq 옵션
-----------------------------------------------------------------------
- M : 월 간격
- H : 1시간 간격 (ex) 2H -> 2시간 간격
날짜 데이터 분리
데이터의 데이터 타입을 확인해보았더니 Date가 object 형식이다.
따라서 먼저 형식을 datetime으로 변환해주자!
df.info()
----------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 20 non-null object
1 Close 20 non-null int64
2 Start 20 non-null int64
3 High 20 non-null int64
4 Low 20 non-null int64
5 Volume 20 non-null int64
dtypes: int64(5), object(1)
memory usage: 1.1+ KB
df['Date_new'] = pd.to_datetime(df['Date'])
df.info()
--------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 20 non-null object
1 Close 20 non-null int64
2 Start 20 non-null int64
3 High 20 non-null int64
4 Low 20 non-null int64
5 Volume 20 non-null int64
6 Date_new 20 non-null datetime64[ns]
dtypes: datetime64[ns](1), int64(5), object(1)
memory usage: 1.2+ KB
Date 컬럼의 데이터 타입을 변경한 컬럼을 Date_new 컬럼으로 새롭게 만들었다.
Date_new 컬럼의 기본 형식은 2018-01-01 과 같은 년-월-일 데이터이다.
여기서 년도가 궁금하다면?
=> dt.year을 붙이면 된다.
# Timestamp
# 연-월-일 데이터에서 연, 월, 일 추출
print(df['Date_new'])
print(df['Date_new'].dt.year)
month가 궁금하다면?
=> dt.month를 붙이기
print(df['Date_new'].dt.month)
day가 궁금하다면?
=> dt.day 붙이기
print(df['Date_new'].dt.day)
to_period
to_period 메서드는 DatetimeIndex를 PeriodIndex로 변환하는 메서드이다.
사용 방법
------------------------------------------------------------------------------
df.to_period(freq=None, axis=0, copy=True)
freq
: 원하는 시간 단위로 변환 가능
axis
: 변환할 기준 축
copy
: 사본을 형성할지 여부
idx = pd.date_range(start='2021-08-01',periods=5,freq='45D') # 45일 간격 인덱스
>>
DatetimeIndex(['2021-08-01', '2021-09-15', '2021-10-30', '2021-12-14',
'2022-01-28'],
dtype='datetime64[ns]', freq='45D') # 형식은 datetime64
* freq 값을 지정하여 원하는 시간간격으로 출력 가능
# freq="Y"
print(idx.to_period("Y"))
>>
PeriodIndex(['2021', '2021', '2021', '2021', '2022'], dtype='period[A-DEC]')
----------------------------------------------------------------------------------------
# freq="M"
print(idx.to_period("M"))
>>
PeriodIndex(['2021-08', '2021-09', '2021-10', '2021-12', '2022-01'], dtype='period[M]')
----------------------------------------------------------------------------------------
# freq="W"
print(idx.to_period("W"))
>>
PeriodIndex(['2021-07-26/2021-08-01', '2021-09-13/2021-09-19',
'2021-10-25/2021-10-31', '2021-12-13/2021-12-19',
'2022-01-24/2022-01-30'],
dtype='period[W-SUN]')
----------------------------------------------------------------------------------------
# freq="H"
print(idx.to_period("H"))
>>
PeriodIndex(['2021-08-01 00:00', '2021-09-15 00:00', '2021-10-30 00:00',
'2021-12-14 00:00', '2022-01-28 00:00'],
dtype='period[H]')
위의 df 데이터에서 to_period 메서드를 적용해보자.
# Period
print(df['Date_new'])
print(df['Date_new'].dt.to_period(freq = 'A')) # 연
------------------------------------------------------
0 2018-07-02
1 2018-06-29
2 2018-06-28
3 2018-06-27
4 2018-06-26
5 2018-06-25
6 2018-06-22
7 2018-06-21
8 2018-06-20
9 2018-06-19
10 2018-06-18
11 2018-06-15
12 2018-06-14
13 2018-06-12
14 2018-06-11
15 2018-06-08
16 2018-06-07
17 2018-06-05
18 2018-06-04
19 2018-06-01
Name: Date_new, dtype: datetime64[ns]
0 2018
1 2018
2 2018
3 2018
4 2018
5 2018
6 2018
7 2018
8 2018
9 2018
10 2018
11 2018
12 2018
13 2018
14 2018
15 2018
16 2018
17 2018
18 2018
19 2018
Name: Date_new, dtype: period[A-DEC]
날짜 인덱싱
df['2018], df['2018-06'] 등으로 2018년, 2018년 6월의 데이터만 추출 가능
loc 메서드도 사용 가능
df.loc['2018-06','High':'Low'] # 연월 & High 열부터 Low 열까지
# 날짜 1부터 날짜 2까지의 데이터만 추출도 가능
df.loc['2018-06-02':'2018-06-16']
※ 여기서 주의할 점
날짜 데이터의 loc는 끝 날짜를 포함한다.
# 끝나는 날짜 포함
df.loc['2018-06-02':'2018-06-18']
# 오늘 날짜 기준으로 차이점으로 인덱싱도 가능
# difference
today = pd.to_datetime('2023-06-02')
df['day_diff'] = today - df.index
df.set_index('day_diff', inplace = True)
df['1801 days':'1810 days']
'Python > [개념 및 문법]' 카테고리의 다른 글
조건을 단 하나라도 만족하는 경우/ 조건 판단 / bool 타입 변수 변경 (0) | 2023.06.21 |
---|---|
[python] 반복문에서의 continue (0) | 2023.06.20 |
[python] 정규화(최대절대값 정규화, 최소값-최대값 정규화) (1) | 2023.06.19 |
[사이킷런] 더미변수 만들기, 라벨 인코딩, 원핫 인코딩 (0) | 2023.06.19 |
[Pandas] 데이터 구간별 범주화 pd.cut, pd.get_dummies (0) | 2023.06.19 |