ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pandas DataFrame Index 판다스 데이터프레임 인덱스 수정
    ▶파공's 취미 생활/▷파이썬 공부 2021. 7. 13. 18:08

    안녕하세요

    파이어(F.I.R.E.)를 꿈꾸는 공룡

    '파공' 입니다.



    오늘은 Pandas DataFrame(판다스 데이터프레임)

    인덱스 수정 방법에 대해서 다양하게 보여드리겠습니다!

     

     

     

     

     

    ● 샘플 데이터 프레임 생성하기

    우선 Pandas 라이브러리를 import 하고 샘플로 사용할 데이터프레임을 생성합니다.

    (데이터프레임 만드는 법은 아래 링크를 참고해주세요!)

     

    [▶파공's 취미 생활/▷파이썬 공부] - Pandas DataFrame 생성 만들기 (+ Numpy 행렬 이용하는법)

     

    Pandas DataFrame 생성 만들기 (+ Numpy 행렬 이용하는법)

    안녕하세요 파이어(F.I.R.E.)를 꿈꾸는 공룡 '파공' 입니다. 오늘은 Pandas 라이브러리의 기본이 되는 DataFrame을 생성하는 방법, 만드는 방법에 대해서 알아보겠습니다. 오늘은 Numpy도 이용할 예정이

    firedino.tistory.com

     

    <코드>

    df_1 = pd.DataFrame({'c1':['a','b','c','d'], 'c2':[1,2,3,4]}, index=['A','B','C','D'])
    df_1
    cs

    <실행 화면>



     

     

     

      인덱스 수정 방법 1. _ 인덱스 새로 정의하기

    <코드>

    df_1.index = ['W','X','Y','Z']
    df_1
    cs

    <실행 화면>

    가장 쉬운 방법입니다. 말 그대로 인덱스를 새로 정의하는 것이죠. 하지만, 문제가 있습니다. 지금처럼 데이터가 적은 경우에는 괜찮지만, 데이터가 많아지면 이렇게 일일이 인덱스를 다 적어줄 수 없습니다.

     

    데이터 프레임에서

     

    데이터 갯수 = 행의 갯수 = 인덱스의 갯수

     

    이기 때문에 데이터가 많을 경우, 인덱스 갯수도 많아집니다. 이 방법은 기존 인덱스의 숫자만큼 일일이 다 적어줘야 되기 때문에 간단히 샘플을 연습할 때만 사용가능합니다.

     

     

     

     

     

      인덱스 수정 방법 2. _ 특정 컬럼을 인덱스로 사용하기

    <코드>

    df_1
     
    df_2 = df_1.set_index('c1')
    df_2
     
    df_3 = df_1.set_index('c1', drop=False)
    df_3
    cs

    <실행 화면>

    위 그림과 같이 데이터프레임 내부의 특정 컬럼을 인덱스로 이용하는 방법입니다.

     

    .set_index() 에서 drop 파라미터의 기본값은 True 입니다. 그래서 df_2와 같이 'c1'컬럼을 인덱스로 사용하게되면, 기존의 데이터프레임에서 'c1'컬럼은 drop되게 됩니다. 

     

    하지만 drop 파라미터에 False를 넣어주게되면, df_3과 같이 'c1'컬럼은 인덱스로 쓰이면서도 기존 데이터프레임에 그대로 남게 됩니다.

     

     

     

     

     

      인덱스 수정 방법 3. _ 인덱스 초기화 하기, 인덱스를 컬럼으로 가지고 들어오기

    <코드>

    df_1
     
    df_4 = df_1.reset_index() 
    df_4
     
    df_5 = df_1.reset_index(drop=True
    df_5
    cs

    <실행 화면>

    이 방법은 인덱스를 그냥 초기화하는 방법입니다. 인덱스가 0, 1, 2, 3으로 바뀐 것을 확인하실 수 있죠?

     

    .reset_index().set_index()다르게, drop 파라미터의 초기값이 False입니다. 그래서 df_4와 같이 인덱스를 초기화 하게 되면, 기존의 인덱스를 drop시키지 않고 'index'라는 컬럼을 만들어 데이터프레임 안으로 가지고 들어옵니다.

     

    반면에 drop 파라미터에 True를 넣어주게 되면, 인덱스가 초기화 되면서 df_5와 같이 기존의 인덱스는 그냥 사라지게 됩니다.

     

     

     

     

     

      인덱스 수정 방법 4. _ 인덱스 순서 바꾸기

    <코드>

    df_1
     
    df_6 = df_1.reindex(['Z','Y','W','X'])
    df_6
     
    df_7 = df_1.reindex(['Z','Y'])
    df_7
    cs

    <실행 화면>

    인덱스의 순서를 바꾸는 방법입니다. .reindex()를 사용하여 원하는 순서대로 인덱스를 다시 나열해주시면 됩니다. df_6과 같이 기존 인덱스를 다 적어주셔도 되고, df_7과 같이 덜 적어주셔도 됩니다.

     

    주의할 점은! 인덱스 순서가 바뀌면 그 행의 데이터들이 같이 움직인다는 것입니다. 단순히 인덱스만 바꾸는 것이 아니라 데이터 전체가 같이 움직이는 것이죠.

     

    그렇기 때문에 df_7과 같이 인덱스를 통해 원하는 데이터를 추출하는 방법으로도 사용할 수 있습니다.

     

     

     

     

     

      인덱스 수정 방법 5. _ 특정 인덱스만 선택적으로 수정하기

    <코드>

    df_1
     
    #temp 열을 만들어서 기존의 인덱스를 가지고온다.
    df_1['temp'= df_1.index
    df_1
     
    #loc를 사용해서 바꾸고 싶은 인덱스만 temp 열에서 바꿔준다.
    df_1.loc[['X'],['temp']] = 'NEW'
    df_1
     
    #temp열을 다시 인덱스로 가져오자.
    df_8 = df_1.set_index('temp',drop=True)
    df_8
     
    #인덱스 열에 temp라고 써있는게 싫다면 지워준다.
    df_8 = df_8.rename_axis('')
    df_8
    cs

     

    <실행 화면>

    위 그림에서 보여드린 것은 한번에 딱 (메소드를 사용해서) 할 수 있는 방법은 아니고, 약간의 절차를 거쳐야하는 방법입니다. 데이터 전처리를 연습하다보면 아주 간혹! 데이터들은 그대로 둔 채, 인덱스 명만 바꾸고 싶을 때가 있더라구요. 그것도 딱 특정 몇 놈의 인덱스 만 바꾸고 싶을 때가 있다보니.... 그 방법을 보여드리려고 합니다. 물론, 저는 코린이이기 때문에 더 좋은 방법이 있으시다면 저도 좀 알려주세요..ㅠㅠ

     

    절차들은 위 코드에 달아놓은 주석 참고해주시면 되구요. df_8df_1을 비교해보면 인덱스에서 딱 'X''NEW'로 바뀐 것을 확인하실 수 있습니다. 

     

     

     

     

     

    오늘은 Pandas DataFrame (판다스 데이터프레임)을 다루는 방법들 중에서 Index (인덱스) 를 수정하는 여러가지 방법들에 대해서 말씀드려봤습니다. 도움이 되셨기를 바라겠습니다~^^

     

     

     

     

     

    오늘도 글 읽어 주셔서 감사합니다!

     

    Look Rich or Be Rich

    현명한 선택을 응원합니다.

    -파공-

    댓글

Designed by Tistory.