일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- 시계열데이터셋
- 년월일 데이터
- 시계열시각화
- loess
- 시계열모듈
- seaborn # kdeplot # 데이터분석
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- adf_test
- 이수역 양식집
- 시계열분해
- 빈 데이터프레임 #pandas #데이터전처리
- 시간형식
- pandas
- 리눅스개념
- Python
- stl
- 크롤링자동화
- 플로틀리
- 오제이튜브
- 응용이 보이는 선형대수
- 시계열
- 확률
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- np.split
- timeseries decomposition
- 시간형식변환
- 짧은 시계열 # 금융시계열
- 날짜파싱
- 파이프라인전처리
- Today
- Total
데이터분석과 개발
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col 본문
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col
긍정적인마인드 2023. 1. 8. 22:34* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.
* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.
데이터를 읽어올 때 인덱스에 한번에 시간을 datetime형식으로 넣어주고 싶을때가 많습니다.
특히 시계열이라면 더욱 그렇겠죠.
그래서 시간 성분이 나눠진 데이터셋 (ex. 년 / 월 / 일..) 을 바로 datetime형식으로 인덱스에 넣어주는 전처리를
정리해보려 합니다.
사용할 데이터는 UCI 사이트의 베이징 대기오염 데이터셋입니다.
https://archive.ics.uci.edu/ml/datasets/Beijing+PM2.5+Data
# 데이터셋
df = pd.read_csv('./data/PRSA_data_2010.1.1-2014.12.31.csv')
df
데이터를 보면 하나의 날짜컬럼으로 되어있지 않고 year, month, day, hour가 다 따로 되어있는 것을 볼 수 있습니다.
이 데이터를 read_csv 함수의 파라미터들을 통해 더 편하게 Datetime인덱스로 만들어보려 합니다.
1. parse_dates
판다스 read_csv함수안에 parse_dates 는 날짜형식으로 되어있는 데이터를 datetime형식으로 바꿔주는 함수입니다.
공식문서를 참조하면 4가지 형태로 사용할 수 있다고 나와있네요.
사용할 parse_dates 는 (3) parse_dates = 리스트의 리스트 이니 (3)에 집중해 주세요!
(1) parse_dates = True
parse_dates에 불린(boolean)형식을 넣어주게 되면 인덱스를 datetime형식으로 바꿔줄 수 있다고 합니다.
지금 데이터셋의 경우 그냥 숫자이기 때문에 아무 변화가 없는 모습입니다.
# parse_dates 사용: 인덱스
df = pd.read_csv('./data/PRSA_data_2010.1.1-2014.12.31.csv', parse_dates=True)
df
(2) parse_dates = 리스트형식
parse_dates에 리스트 형식을 넣어주게 되면 (ex. [1,2,3,4] or ['year','month','day','hour'] )
리스트에 해당하는 컬럼을 모두 datetime형식으로 바꿔준다고 합니다.
지금 데이터셋 같은 경우 year의 경우만 datetime형식을 만족했기 때문에 바꿔진 모습입니다.
( 만족했다기보다는 년도만 넣어줘도 자동으로 xxxx년 1월 1일로 바꿀수 있기 때문!)
# parse_dates 사용: 리스트
df = pd.read_csv('./data/PRSA_data_2010.1.1-2014.12.31.csv', parse_dates=['year','month','day','hour'])
df
(3) parse_dates = 리스트의 리스트 형식
마지막으로 데이터셋에 사용할 형식입니다. (공식 문서에 list of list 라고 표현하고 있네요)
parse_dates에 리스트의 리스트 형식을 넣어주게 되면 (ex. [[1,2,3,4]] or [['year','month','day','hour']] )
넣어준 컬럼들을 하나로 합쳐 datetime형식으로 만들게 됩니다.
단순 공백으로 합치기 때문에 datetime형식으로 바뀌지 않았네요
여기서 parse_dates 를 도와줄 수 있는 date_parser 가 있습니다.
date_parser에 데이터를 datetime형식으로 바꿔주는 함수를 넣어준다면 parse_dates를 통해 datetime 형식으로 바꿀 수 있습니다.
# date_parser 에 넣어줄 함수 정의
def parser(x):
parser = datetime.strptime(x,'%Y %m %d %H')
return parser
이 parser 함수를 date_parser 함수에 넣어주게 되면
# parse_dates 사용
df = pd.read_csv('./data/PRSA_data_2010.1.1-2014.12.31.csv',
parse_dates=[['year','month','day','hour']],
date_parser=parser)
df
object였던 데이터 형식이 datetime 형식으로 잘 바뀐 것을 볼 수 있습니다.
마지막으로 index_col 을 사용하여 바뀐 datetime형식의 데이터를 인덱스에 넣어주면 분석하기 쉬운 DatetimeIndex형식의 데이터로 바로 읽어올 수 있게 됩니다.
index_col 은 인덱스에 넣어줄 컬럼을 지정해주는 파라미터 입니다. 인덱스 또는 직접 컬럼이름을 적어서 지정해 줄 수 있습니다.
# parse_dates , index_col 사용
df = pd.read_csv('./data/PRSA_data_2010.1.1-2014.12.31.csv',
parse_dates=[['year','month','day','hour']],
date_parser=parser,
index_col=0)
df
DatetimeIndex로 잘 읽어진 것을 볼 수 있습니다.
사실 자주 사용할 것 같진 않지만 알아둔다면 좀 더 편하게 전처리 할 수 있을 것 같네요.
오늘 정리는 여기서 마치도록 하겠습니다. 감사합니다!
참고:
https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/
* pandas공식문서
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
'AI(시계열) > 데이터 전처리' 카테고리의 다른 글
[pandas] 데이터프레임 날짜 인덱스 늘리기(reindex) (0) | 2023.03.16 |
---|---|
[Pandas] 데이터 음수값 없애기 (0) | 2023.03.14 |
[전처리] 전처리 파이프라인 구축하기(1) (0) | 2023.01.07 |
[전처리] 시계열 데이터에서 train, validation, test 나누기 (0) | 2023.01.04 |