본문 바로가기

💻프로그래밍/python

[pandas] 2-1. loc와 iloc 차이와 사용방법

반응형

파이썬 기초 문법을 공부할 때 인덱싱(indexing) 개념에 대해 배웠을 것이다. '인덱싱'에 대해 잘 모른다면 (클릭).

인덱싱은 데이터 프레임에도 적용할 수 있는데, 판다스에서 특정 행(row)나 열(column)을 골라낼때 사용하는 방법으로 loc와 iloc가 있다. 

 

 

 

01.  loc

loc는 location의 약어로, 데이터 프레임의 행 또는 칼럼의 label이나 boolean array로 인덱싱하는 방법이다. 즉, 사람이 읽을 수 있는 라벨 값으로 특정 값들을 골라오는 방법이라고 생각하면 된다.

 

 

〰️ loc 사용방법

df.loc[행 인덱싱 값, 열 인덱싱 값]

 

 

먼저 하나의 데이터 프레임을 불러온 뒤, 변수 df1으로 선언한다.

 

 

 loc[ ] 에  하나의 값만 입력한다면 그에 해당되는 하나의 행만 뽑아 온다고 생각하면 된다. 위의 경우 df1.loc[0]을 입력한 것은 'df1이라는 전체 데이터 프레임에서 인덱스 이름이 0인 행만 출력해서 가져와'라는 의미가 된다. 출력된 결과 값을 보면 세로로 배열되어 있어서 헷갈릴 수 있지만, 

 

실제로는 이렇게 인덱스 이름이 0인 행이 선택되어 출력된것이다.

 

 

 


이번에는 위의 빨간 네모 박스안에 있는 특정 값만을 추출해보자. 해당 값은 행의 인덱스명이 0,  'Name'이라는 칼럼에 있는 값이다. 

 

따라서 이러한 흐름에 맞춰 코드를 작성해보면  df1.loc[0, 'Name'] 으로 써주면 된다. 결과를 출력해보면 우리가 원하는 특정 값이 출력된 것을 알 수 있다.

 

 


파이썬 기초 문법을 잘 알고 있는 사람들은 '인덱싱을 할 수 있다면 혹시 슬라이싱도 할 수 있지 않을까?'라는 생각을 할 수 있을 것이다. 이번에는 특정한 하나의 값이 아닌 범위로 지정하여 한번에 데이터를 가져와보도록 한다. (슬라이싱 개념 다시 확인 (클릭))

 

 

슬라이싱 개념을 loc에 적용해서 데이터 프레임의 값들을 가져와보자. 특정 구간을 지정하지 않고 : 로만 입력한다면 처음부터 끝까지!로 범위가 설정된다. 따라서  df1.loc[ : , : ] 라는것은 'df1라는 데이터 프레임에서 전체 행, 전체 열을 가져와'라는 의미가 된다.

 

 

여기서 이제 자신이 가져오고 싶은 특정 구간을 지정해주면 되는데,

 

첫 번째로, 'Pclass'라는 특정 칼럼만 가져와보자.

 

 

사실 이 경우는 굳이 loc를 사용하지 않아도 아래와 같은 방법으로 훨씬 쉽게 특정 열을 가져올 수 있다.

 

 

그래도 한번 loc를 사용해본다면,  df1.loc[:, 'Pclass] 로 작성하여 전체 행을 추출하고 열을 입력하는 자리에 내가 가져오고 싶은 특정 칼럼명을 적어주면 된다.

 

 


이번에는 구간을 조금 더 넓혀서 위의 빨간 박스 안에 있는 값들을 한 번에 가져와보자. 해당 값들은 행의 인덱스 이름이 0인것부터 4까지, 'Passengerld'부터 'Age'칼럼까지로 범위를 지정할 수 있다. 

 

 

따라서 위의 코드처럼  df1.loc[ :4, :'Age'] 로 작성해주면 내가 원하는 범위에 있는 값들을 한 번에 가져올 수 있다. (다시 한번 짚고 넘어가자면 슬라이싱에서 : 의 앞에 아무것도 안 쓰면 첫번째 값부터 라는 의미이고, :의 뒤에 아무것도 안쓰면 끝까지 라는 의미가 된다. 따라서 처음의 행 또는 열부터 범위를 지정하는 경우, 위의 코드처럼 :앞에 아무런 값을 쓰지 않아도 된다.)

 

 

 


맨 처음 언급했듯, loc는 불린(boolean)으로 특정 값을 추출해올 수 있다.(불 자료형 다시 확인 (클릭)). 따라서 이번에는 전체 데이터 프레임에서 특정한 조건을 만족시키는 값들만 추출해오도록 하자.

 

'Pclass'라는 칼럼에서 값이 3인 값들만 추출하려면 어떻게 해야 할까? 

 

 

위와 같이 내가 추출하고자 하는 특정한 조건을 하나의 변수로 선언한 다음, 그 변수를 loc[ ]에 넣어준다. 결과를 확인해보면 'Pclass'에서 값이 3인 경우만 출력됨을 알 수 있다.

 

 해당 조건을 [ ]안에 직접 적어주어도 동일한 결과가 출력된다. 

 

 

 

이러한 방법을 이용하면 내가 원하는 조건을 충족하는 데이터만 뽑아낼 수 있는데, 

loc[ ]안에 원하는 조건식을 작성하면 된다. 위의 코드를 보면 df1.loc[(df1['Pclass']==3) | (df1['Age]>=30)] 으로, df1의 'Pclass'라는 칼럼에서 값이 3이거나 ( | 를 사용하면 '~이거나'라는 의미,  & 를 사용하면 '그리고'라는 의미) df1의 'Age'칼럼의 값이 30보다 크거나 같은 경우에 해당되는 값들만 출력하라는 의미가 된다. 

 

 

 

반응형