[Pandas] DataFrame 특정 row 선택하는 두가지 방법(loc,iloc)

반응형
    반응형

    이번 포스팅에서는 DataFrame 에서 row를 선택하는 방법에 대해 살펴볼까 합니다.

    크게 두가지 방법이 있는데요. 

    둘 다 인덱스를 사용하는 것은 같지만 DataFrame 에서 사용하는 인덱스를 우리가 설정할 수 있기 때문에 설정을 한 것으로 찾느냐 아니면 DataFrame 에 저장되어 있는 인덱스 번호로 찾느냐는 차이입니다.

    데이터 상황에 맞춰서 두가지를 혼용해서 쓸 수 있습니다.

     

    살펴볼 것은 다음과 같습니다.

    1. loc

    2. iloc

     

    아래와 같은 DataFrame을 가져왔습니다. 2019년 1월 기준 코스피 200 종목입니다.

    현재 인덱스가 정해지지 않아서 숫자로 표기되어 있습니다.

    '종목명' 으로 인덱스를 설정하겠습니다.

     

    df = df.set_index('종목명')

     

    1. loc

     loc를 사용해서 row를 선택해보도록 합시다. loc는 지금 내가 설정한 index에 따라서 선택이 가능합니다.

    '호텔신라'를 선택해보겠습니다.

    df.loc['호텔신라']

     

    인덱스를 두개 이상을 선택하고 싶다면 리스트로 넣습니다.

    df.loc[['호텔신라','휴켐스']]

     

    하나만 선택하면 Series로 나오지만 두개 이상 선택시 DataFrame으로 나오는 걸 볼 수 있습니다.

     

    더 정확하게 말하면 리스트로 요청하는지에 따라 Series와 DataFrame으로 바뀝니다.

    인덱스를 리스트 안에 넣으면 DataFrame으로 나오게 됩니다.

    df.loc[['호텔신라']]

     

    1.1. column 선택하기

    컴마(,)로 구분해 원하는 column을 선택할 수 있습니다.

    df.loc[['호텔신라'],['현재가']]

     

    위와 마찬가지로 현재가를 리스트가 아닌 문자열로 입력하게 되면 Series로 나오게 됩니다.

    df.loc[['호텔신라'],'현재가']

     

    값만 나오게 하고 싶다면 문자열 형식으로 써넣어야 합니다.

    df.loc['호텔신라','현재가']

     

    여러 개의 column을 선택하려면 리스트로 반환합니다.

    df.loc[['호텔신라'],['종목코드','현재가','등락률']]

     

     

    선택범위가 연속적이라면 슬라이싱을 활용합니다.

    df.loc[['호텔신라'],'종목코드':'등락률']

     

    따라서 값을 변경하고 싶다면 값만 나오는 문자열형식으로 쓰고 값을 변경합니다.

    df.loc['호텔신라','현재가'] = 60000
    df.loc['호텔신라','현재가']

     

    2. iloc

    iloc를 사용하면 번호로 된 고유인덱스(row_number)로 row를 불러올 수 있습니다.

    df.iloc[20]

     

     

    iloc는 고유넘버로 합니다. 따라서 column 또한 고유넘버인 column_number로 넣어주어야 합니다.

    0번부터 시작하기 때문에 굉장히 헷갈립니다. 아무튼 현재가를 가져오겠습니다.

    현재가의 컬럼은 2번째이므로 1이 됩니다.

    df.iloc[20,1]

    loc와 마찬가지로 리스트로 넣으면 Series와 DataFrame으로 만들 수 있습니다.

     

    df.iloc[[20],1]

     

    df.iloc[[20],[1]]

     

    iloc로도 값을 변경하고 싶다면 값으로만 나오는 형식으로 써서 변경을 합니다.

    df.iloc[20,1] = 30000
    df.iloc[20,1]

     

    loc,iloc로 많은 것을 할 수 있습니다.

    무엇보다 제일 주의해야할 것은 어떻게 쓰면 값, Series, DataFrame이 나오는지 알고 있어야 합니다. 

    보통 for문을 할텐데 어떻게 나오는지 그려내지 못한다면 그에 맞는 코드를 쓰지 못해 영문모를 오류가 계속 나올 수 있습니다.

     

    관련 포스팅

    [Python/Pandas] - [Pandas] 원하는 위치값 가져오기(at,iat)

     

     

     

    댓글

    Designed by JB FACTORY

    ....