[Pandas] 시간데이터 만들기(date_range)

반응형
    반응형

    판다스로 시간데이터를 만들어 보겠습니다.

    어디서 데이터를 가져오는 게 아니고 직접 만들어서 하는 방법입니다. 

    타임시리즈 데이터로써 데이터를 다루고 싶을 때 쓰면 유용한데

    date_range() 함수를 쓰면 시간데이터를 만들 수 있습니다.

     

    dates = pd.date_range('2020-1-1',periods=6,freq='M')

    이렇게 간단히 만들 수 있습니다.

    타입은 datetime64로 만들어집니다.

     

    파라미터

    date_range()의 파라미터는 다음과 같습니다.

    파라미터 포맷 기능
    start string/datetime 데이터의 시작시간을 지정
    end string/datetime 데이터의 끝시간을 지정
    periods integer/None 기간의 수를 지정
    freq stgring/Dateoffset 일/월/년별 지정 ex) 5D는 5일씩
    normalize bool, default None start나 end에 쓴 시간대를 자정으로 변경
    name string,default None 인덱스 이름 설정
    tz string/None 시간대(time zone) 설정
    closed None,left,right 범위 포함여부

     

    조심해야하는 건 start, end, periods,freq는 같이 쓸수가 없습니다. 

    4개의 파라미터를 동시에 쓰면 오류가 발생합니다.

    dates = pd.date_range('2020-1-1','2020-10-01',periods=10,freq='M')

    start,end, periods 조합은 가능한데 periods에 맞게 임의로 맞춰줍니다.

    dates = pd.date_range('2020-1-1','2020-10-01',periods=10)
    dates

     

    tz는 어느 위치에 있는 시간대를 쓸건지 설정할 수 있는데 대륙/나라 로 보통 표기를 합니다.

    만약 'Asia/Hong_Kong' 으로 설정하면 홍콩에서의 시간으로 변경됩니다.

    아무 입력이 없으면 현위치로 설정됩니다.

     

    tz는 time zone 모듈인 pytz로 찾아낼 수 있습니다. 추후에 기회가 된다면 포스팅을 하겠습니다.

     

    closed는 {None,left,right}로 구성되어 있고 디폴트는 None입니다.

    start,end와 같이 쓰이는데요.

    end 날짜를 제외하고 싶으면 left,

    strart 날짜를 제외하고 싶으면 right 를 입력합니다.

     

    dates = pd.date_range('2020-1-1','2020-10-01',freq='MS',closed='left')
    dates

     

    freq 값

    freq가 가능한 값이 굉장히 다양합니다. 초부터 년까지 다 다룰수 있습니다.

    월별의 경우 첫째날로 할것인지 끝날로 할것인지 정할 수 있고

    비즈니스 데이라고 해서 공휴일을 제외한 평일로 자동으로 할 수 있어서 유용하게 쓸수 있습니다.

     

    B 비즈니스 데이
    C 커스텀 비즈니스 데이
    D 일별
    W 주별
    M 월별 말일 
    BM 비즈니스 월별
    MS 월별 시작일
    BMS 비즈니스 월별 시작일
    Q 분기별 말일
    BQ 비즈니스 분기별
    QS 쿼터 시작일
    BQS 비지니스 분기 시작일
    A 연도별 말일
    BA 비즈니스 연도별 말일
    AS 연도별 시작일
    BAS 비즈니스 연도별 시작일
    H 시간별
    T 분별
    S 초별
    L 밀리초(Milliseconds)
    U 마이크로초(Microseconds)

     

    다른것도 있겠지만 date_range()의 특징은 3D(3일씩 건너띄기) 이런게 가능합니다. 

     

    dates = pd.date_range('2020-1-1','2020-10-01',freq='3D')
    dates
    

    freq을 잘 써서 그에 맞게 하는것으로 시간 인덱스를 구성하는 것으로 마무리를 할 수 있습니다.

     

     

    관련포스팅

    [Python/Pandas] - [Pandas] 시간 데이터 처리

    [Python/Pandas] - [Pandas] DataFrame 시간 인덱스 나누기

    [Python/Pandas] - [Pandas] DataFrame 인덱스 설정, 리셋

    댓글

    Designed by JB FACTORY

    ....