[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