본문 바로가기
Python/Pandas

.iloc 메서드(정수 위치)를 이용한 인덱싱과 슬라이싱-pandas(12)

by 콩돌 2019. 10. 21.
반응형

파이썬 버전 3.7 기준

pandas 버전 0.25.1 기준



 .iloc 메서드(정수 위치)를 이용한 인덱싱


본 포스팅에서는 .iloc 메서드에 대해 좀 더 상세히 알아볼 것이며, 이 메서드를 이용한 인덱싱에 대해 살펴볼 것이다.



 .iloc 메서드에 대한 설명


pandas는 순수하게 정수 기반 인덱싱을 위한 일련의 메서드들을 제공한다.

.iloc 메서드는 주로 정수 위치(integer position) 기반으로 사용된다.

  ○ 여기서 정수 위치 인덱싱은 0에서 축의 길이-1에 해당된다.



 .iloc 메서드의 특징

.iloc 메서드의 특징으로는 다음과 같다.

   python 인덱싱과 동일하게 0부터 시작한다. (0-based 인덱싱)

  ○ 파이썬과 Numpy 슬라이싱에 거의 가깝게 따른다.

    ▷ 슬라이싱을 사용할때 시작지점은 포함되어 있는 반면 마지막 입력지점은 제외된다.(python 슬라이싱과 유사)

   불린 배열(boolean array)를 사용하는 것이 가능하다.

   만약 입력된 인덱스가 범위를 넘어서는 경우에는 IndexError를 발생시킨다. 

    ▷ 슬라이싱을 할때에는 예외적으로 인덱스 범위를 넘어서도 된다.

  ○ 비정수 인덱싱을 사용할 경우 IndexError를 일으킨다.



 .iloc 메서드의 사용법

.iloc 메서드는 .loc와 마찬가지로 .iloc 뒤에 대괄호를 붙여 사용한다. 

구문 형식은 다음과 같다.


.loc 메서드의 기본적인 구문 형식)

# Series에서의 사용

  Series.iloc[ index_int ]  # Series에서의 요소 선택 


# DataFrame에서의 사용

  DataFrame.iloc[ index_int ]                         # 행의 선택 

  DataFrame.iloc[ index_int , column_int  ]   # 하나의 요소 선택 


index_int은 행을 선택하기 위한 인덱스의 위치 정수를 의미한다.

column_int은 행 선택 이후 해당 행에서 요소를 선택하기 위한 열의 위치 정수를 의미한다.

각 변수 위치에 슬라이싱을 입력해도 유효하다.


①은 Series에서 데이터를 선택하는 형식이며 하나의 요소를 반환한다.

②은 DataFrame에서 데이터를 선택하는 형식이며 행에 해당하는 Series를 반환한다.

③은 DataFrame에서 데이터를 선택하는 형식이며, 열의 레이블을 입력함으로써 하나의 요소를 선택하여 반환한다.



 .iloc 메서드의 입력 자료형

.iloc에 사용 가능한 입력 자료형으로는 다음과 같다.

   하나의 정수 (5)

    ▷ 입력되는 정수는 위치른 나타내는 정수이다. (.loc에서의 정수사용과 다르므로 주의가 필요하다.)

   정수의 리스트 ([3, 4, 0])

   정수의 슬라이스 객체 (1:4)

   불린 배열(boolean array)

   callable 함수

    ▷ 하나의 입력변수를 활용하고 인덱스에 대한 명확한 출력을 반환하여야 한다.


대괄호 .loc, .iloc, .ix 메서드의 차이

  .loc 메서드는 레이블을 이용하여 행을 선택하며,

    ▷ 슬라이싱을 할 경우 처음과 끝이 둘 다 포함된다.

  .iloc메서드는 위치 정수를 이용하여 행을 선택한다.

    ▷ 슬라이싱을 할 경우 처음은 포함되나 끝 요소는 포함이 되지 않는다.

  공통점으로는 둘 다 불린 배열(boolean array)를 이용한 인덱싱이 가능하다.

  .ix 메서드는 레이블과 위치정수 둘 다 사용이 가능한 메서드이다.

    ▷ 단, 사용하는 것은 지양된다.



 .iloc 사용 예



 행의 선택

아래 예제는 하나의 인덱스 레이블을 이용하여 행을 선택한 예이다.


행의 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# .loc메서드를 사용하여 행을 선택하는 예

In[4]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[5]: ex_df.iloc[2]

Out[5]: 

c0    6

c1    7

c2    8

Name: r2, dtype: int64



 DataFrame에서의 하나의 요소 선택

아래 예제는 인덱스 위치정수와 열의 위치정수를 이용하여 하나의 요소를 선택하는 예제이다.


요소 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 하나의 요소 선택 예

In[6]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[7]: ex_df.iloc[1,2]

Out[7]: 5



 슬라이싱을 이용한 선택

다음 예제는 슬라이싱을 사용하여 선택을 하는 예제이다.

.loc와는 다르게 슬라이싱의 끝값이 포함이 되지 않는다.

   이는 파이썬의 슬라이싱과 동일하다.

슬라이싱에 입력된 값들이 인덱싱 범위의 밖에 있을 경우도 결과를 반환한다.

   끝 값이 인덱스 범위를 넘어설 경우 자동으로 가장 끝값까지 출력한다.


슬라이싱을 이용한 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 인덱스의 슬라이싱 사용 예

In[8]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[9]: ex_df.iloc[0:1, 1:]

Out[9]: 

    c1  c2

r0   1   2



 불린 배열을 이용한 데이터 선택

아래 예제는 불린 인덱싱을 사용하여 데이터를 선택하는 예제이다. 


불린 배열 사용 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


인덱스의 불린 배열 사용 예

In[11]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[12]: ex_df.iloc[[True, False, True]]

Out[12]: 

    c0  c1  c2

r0   0   1   2

r2   6   7   8


인덱스와 열의 불린 배열 예

In[13]: ex_df.iloc[[True, False, True], [True, False, True]]

Out[13]: 

    c0  c2

r0   0   2

r2   6   8



 callable 함수를 이용한 데이터 선택

다음 예제는 람다 표현식을 이용하여 데이터를 선택하는 예제이다.

다음 예제에서 보여주는 것과 같이 함수를 사용하여 필요한 데이터를 선택하는 것이 가능하다.


람다표현식 사용 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 예제 DataFrame와 람다표현식의 설정

In[14]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[15]: x= lambda x: int(x)+1


# 람다표현식 사용을 통한 인덱싱 설정

In[16]: ex_df.iloc[x(0.5)]

Out[16]: 

c0    3

c1    4

c2    5

Name: r1, dtype: int64



 .iloc 메서드를 이용한 배정

.iloc를 사용하여 데이터를 선택하는 것 뿐만이 아니라 배정까지 가능하다.

행에 대한 배정, 요소 하나에 대한 배정, 슬라이싱을 이용한 배정 모두 유효하다. 


행의 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 행에 대한 배정 예

In[17]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])

In[18]: ex_df.iloc[0]=[9,9,99]

In[19]: ex_df

Out[19]: 

    c0  c1  c2

r0   9   9  99

r1   3   4   5

r2   6   7   8


# 요소에 대한 배정 예

In[20]: ex_df.iloc[1,1]=9978

In[21]: ex_df

Out[21]: 

    c0    c1  c2

r0   9     9  99

r1   3  9978   5

r2   6     7   8


# 슬라이싱 배정 예

In[22]: ex_df.iloc[1:3, :2] =7105

In[23]: ex_df

Out[23]: 

      c0    c1  c2

r0     9     9  99

r1  7105  7105   5

r2  7105  7105   8


In[24]: ex_df.iloc[1:, 1:] = [[9400, 9401], [9402, 9402]]

In[25]: ex_df

Out[25]: 

      c0    c1    c2

r0     9     9    99

r1  7105  9400  9401

r2  7105  9402  9402




 

 

 

 

 참고자료

  https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

  https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html

 

 

 

 



반응형

댓글