[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 

 

UCI Machine Learning Repository: Beijing PM2.5 Data Data Set

Beijing PM2.5 Data Data Set Download: Data Folder, Data Set Description Abstract: This hourly data set contains the PM2.5 data of US Embassy in Beijing. Meanwhile, meteorological data from Beijing Capital International Airport are also included. Data Set C

archive.ics.uci.edu

 

# 데이터셋
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

 

 

 

 

 

 

 

'데이터분석 > 데이터 전처리' 카테고리의 다른 글

[pandas] 데이터프레임 날짜 인덱스 늘리기(reindex)  (0) 2023.03.16
[Pandas] 데이터 음수값 없애기  (0) 2023.03.14
[전처리] 전처리 파이프라인 구축하기(1)  (0) 2023.01.07
[전처리] 시계열 데이터에서 train, validation, test 나누기  (0) 2023.01.04
'데이터분석/데이터 전처리' 카테고리의 다른 글
  • [pandas] 데이터프레임 날짜 인덱스 늘리기(reindex)
  • [Pandas] 데이터 음수값 없애기
  • [전처리] 전처리 파이프라인 구축하기(1)
  • [전처리] 시계열 데이터에서 train, validation, test 나누기
데이터분석과 개발
데이터분석과 개발
데이터분석 뿐 아니라 데이터엔지니어링까지 다하고 싶은 데이터분석가입니다 :)
  • 데이터분석과 개발
    먼지뭉치 Data Analysis
    데이터분석과 개발
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • 데이터분석 (23)
        • 데이터분석 (4)
        • 시계열분석 (6)
        • 데이터 전처리 (9)
        • 데이터시각화 (3)
        • 환경세팅 (1)
        • 논문 (0)
      • AI agent (0)
      • SQL (6)
      • 개발&분석 경험 (3)
      • 알고리즘 (3)
      • OS (1)
      • 수학 (4)
        • 선형대수 (2)
        • 확률&통계 (2)
      • 맛집 (2)
        • 이수&사당 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시간형식
    데이터분석
    seaborn # kdeplot # 데이터분석
    시계열
    stl
    짧은 시계열 # 금융시계열
    리눅스개념
    시계열분해
    빈 데이터프레임 #pandas #데이터전처리
    SQL
    이수역 양식집
    크롤링자동화
    시계열모듈
    응용이 보이는 선형대수
    파이프라인전처리
    pandas
    시간형식변환
    loess
    np.split
    음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
    timeseries decomposition
    Python
    시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
    adf_test
    시계열데이터셋
    시계열시각화
    pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
    확률
    플로틀리
    오제이튜브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데이터분석과 개발
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col
상단으로

티스토리툴바