[Pandas] 데이터프레임 타입 바꾸기(astype)

반응형
    반응형

    데이터프레임의 타입을 바꾸는 방법입니다.

     

    사용 데이터는 국내 etf인 kosdaq 150 레버리지의 가격입니다.

    df.head()

     

    데이터프레임 타입 확인하기

    데이터프레임 타입을 확인하려면 dtypes를 이용합니다.

     

    df.dtypes

    각 컬럼의 타입이 나옵니다. 

    지금 df 같은 경우 날짜만 datatime64[ns] 이고 나머지는 int64 입니다.

     

    데이터프레임 타입 전체 한꺼번에 바꾸기

    모든 타입이 같을 때는 df.astype('타입')을 하면 바뀌기 때문에 간단합니다.

    물론 무조건 되는 건 아니고 서로 바뀔 수 있는 타입이라는 가정에서 된다는 얘기입니다. 

    astype이 만능키가 아님을 강조합니다. 

    astype은 다루기 쉬우니깐 요령 하나를 알려드릴까 합니다. 

    타입이 다른게 섞여있을 때 데이터프레임을 분해해서 따로 떼어내지 않고 진행하는 방법입니다.

     

    위에서 제시한 df로 해보겠습니다.

    현재 df의 숫자들이 int64로 되어있는데 float으로 바꾸고 싶어서 변경하려고 할때 심플하게 df.astype('float')을 하면 좋겠으나 날짜 컬럼은 datetime64로 되어있어서 시도를 하면 오류가 발생합니다.

     

    df.astype('float')

     

    날짜 컬럼이 float으로 바꿀 수 없는 타입이라서 나오는 오류인데 

    컬럼별로 다 써서 타입을 바꿔도 되지만 코드를 길게 쓰기 싫어서 다음과 같이 합니다. 

    날짜 컬럼을 index로 넘겨놓고 진행을 합니다. 

    그러고 다시 인덱스 리셋을 하면 한꺼번에 할 수 있습니다.

    astype은 index는 건드리지 않으니 오류가 발생하지 않습니다.

     

    df.set_index('날짜',inplace=True)
    df = df.astype('float')   #inplace 가 없음
    df.reset_index(inplace=True)
    df

     

    오류없이 날짜 컬럼은 빼고 모두 float으로 바뀌어서 숫자에 .0이 추가된 것을 볼 수 있습니다.

    참고로 df.astype은 inplace 기능이 없으므로 원본의 타입을 바꾸고 싶다면 재정의를 해야합니다.

     

     

    원하는 컬럼만 타입 바꾸기

    모든 컬럼을 바꾸고 싶지 않고 일부의 컬럼의 타입을 바꾸려면 astype({'column' : 'type'})로 표시해 바꿉니다.

    타입을 float으로 바꾼 df에서 시가를 다시 int로 바꾸도록 하겠습니다.

     

    df = df.astype({'시가':'int'}) 또는 df['시가'] = df['시가'].astype(int)
    df

     

    시가를 다시 int로 바꿔서 .0이 사라졌습니다. 실제 타입을 봐도 바뀌어 있습니다.

     

    df.dtypes
    

     

    pandas 타입을 변경할때는 astype으로 무조건 되는게 아니니 서로 타입 변경이 가능한 경우를 잘 알아두는게 좋습니다.

     

     

    관련포스팅

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

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

    댓글

    Designed by JB FACTORY

    ....