파이썬 버전 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 |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
불린 배열(boolean array)을 이용한 인덱싱-pandas(14) (0) | 2019.10.23 |
---|---|
.ix 메서드를 이용한 인덱싱-pandas(13) (0) | 2019.10.22 |
.loc 메서드(레이블)를 이용한 인덱싱과 슬라이싱-pandas(11) (0) | 2019.10.20 |
데이터 인덱싱(loc, iloc, 슬라이싱, 불린인덱싱, at, iat, ix)-pandas(10) (0) | 2019.10.19 |
데이터 및 열 선택, 배정, 추가, 인덱싱, pop 및 insert 메서드-pandas(9) (0) | 2019.10.18 |
댓글