ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] [pandas] index 활용하기
    Data miner/Development log 2020. 10. 15. 16:42
    728x90

    - Dataframe의 index는 데이터의 로우와 칼럼에 대한 이름 등을 저장하는 객체이다. 

    보통 특별히 index값을 정하지 않으면, 0부터의 순차적인 정수값을 가진다. 정수값뿐만이 아니라, 문자열의 값도 가질 수 있다. 

    dataframe.index 
    # Index([0,1,2, ... , '날짜', '2020-10-15')
    • Index 가장 일반적인 index 객체, 파이썬의 numpy 배열 형식
    • MultiIndex 단일 축에 여러 단계의 색인을 표현하는 계층적 색인 객체. 튜플의 배열과 유사
    • DatetimeIndex 나노초 타임스태프를 저장
    • PeriodIndex 기간 데이터에 대한 Index

     

     

    - 한번 설정한 색인은 변경할 수 없다. 

    dataframe.index[0] = 'new index value' 
    #TypeError가 발생!

     

    - 색인 기능으로 특정 로우(행)들을 index로 슬라이싱해서 지울 수 있다. dataframe의 drop함수를 사용하며, 인자로 삭제할 행의 index를 정보를 넣어주면 된다. 아래 코드의 예시는 정수로 인덱싱된 dataframe의 136번 부터 이후의 index값을 지워준다는 코드다. 

    dataframe.drop(dataframe.index[136:]) 

     

    - dataframe의 특정 행의 컬럼값들을 보고자 할 때, 특정 행의 위치를 안다면 dataframe.iloc[i]를 사용하며,

    특정 행의 색인 값을 알고 있다면 dataframe.loc['색인값']을 사용한다. 다만, dataframe.iloc[i]을 사용할 때, 첫번째 행의 위치는 0이기 때문에 5번째 행의 정보가 궁금하다면 5-1=4로 검색해야 한다. dataframe.iloc['n번째 행'-1]

     

    mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
              {'a': 100, 'b': 200, 'c': 300, 'd': 400},
              {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
    df = pd.DataFrame(mydict)
    print(df)
          a     b     c     d
    0     1     2     3     4
    1   100   200   300   400
    2  1000  2000  3000  4000
    
    
    df.iloc[0] #첫번째 행의 값을 보고자 할 때
    a    1
    b    2
    c    3
    d    4
    
    df.iloc[[,]] #복수의 행의 값을 보고자 할 때는 리스트 형태로 값을 iloc안에 넣어준다. 

     

     

    - 이미 존재하는 dataframe에 새로운 행을 추가하고자 할 때, 아래의 코드를 사용한다. ignore_index는 이전 dataframe의 index와 상관없이 0,1,2,... 로 정수형태로 인덱싱된다. ignore_index=False로 사용하고자 할 때에는 Series의 자료형 형태로 값을 넣어줘야 하며, 해당 Series는 이름을 가지고 있어야 한다. 

     

    
    #append하고자 하는 dataframe의 index를 유지하지 않을 경우
    
    new_row = {'a':500, 'c':400}  #<- 새롭게 추가할 행에 값을 지정해서 넣고자 할 때, dic형태로 '특정 컬럼' : '값'의 형태로 넣는다. 
    df = df.append(new_row, ignore_index=True)
    
    #append하고자 하는 dataframe의 index를 유지하고자 할 경우
    new_row = {'a':500, 'c':400} 
    new_row = pd.Series(new_row, name='something name')
    df = df.append(new_row, ignore_index=False)
    

     

    - 재색인 할 수 있다. 

    df = df.reindex([새로운 index순서를 포함한 리스트를 넣는다])
    
    #만약, 재색인할 때, 기존의 dataframe에 존재하지 않은 색인일 경우 디폴트값은 NaN으로 저장되나
    #특정값으로 지정할 수도 있다. 
    
    #아래의 코드는 0으로 채우겠다는 것
    df = df.reindex([새로운 index순서를 포함한 리스트를 넣는다], fill_value=0)
Designed by Tistory.