파이썬 버전 3.7 기준
pandas 버전 0.25.1 기준
데이터 인덱싱 방법과 예제 |
본 포스팅에서는 Series와 DataFrame에 대해 각종 메서드를 이용하여 인덱싱 하는 방법에 대해 다룰 것이다.
인덱싱 |
앞 포스팅에서 대괄호 [ ]를 사용하여 데이터 처리에 대한 기초적인 방법을 소개했다.
이 섹션에서는 다양한 방법을 통한 인덱싱 처리방법을 간략히 다룰 것이다.
각각의 방법에 대한 상세한 사항은 차후에 다룰 예정이다.
인덱싱 방법들 |
아래 표는 pandas에서 처리하는 대표적인 인덱싱 방법을 보여준다.
별다른 설명이 없다면 Series는 스칼라 값을 인덱싱하고, DataFrame는 행을 인덱싱한다.
○ 예를들어, 행을 선택하는 것은 DataFrame의 행에 해당하는 Series를 반환한다.
이름 | 기호 | 설명 |
대괄호 | [ ] | 레이블이나 위치 정수를 활용하여 인덱싱을 한다. |
레이블 인덱싱 | .loc[label] | 레이블을 기반으로 인덱싱을 한다. |
위치 인덱싱 | .iloc[position] | 위치 정수를 기반으로 인덱싱을 한다. |
슬라이싱 | [ : ] | 슬라이싱을 활용하여 인덱싱을 한다. |
불린 인덱싱 | [ bool_vec ] | 불린 벡터를 활용하여 인덱싱을 한다. ○ 불린 연산(<, >, ==, != 등)을 활용하여 조건이 참인 값들을 인덱싱한다. ○ Series에 적용시 Series를 반환한다. ○ DataFrame에 적용시 DataFrame을 반환한다. |
레이블 인덱싱 | .at[label] | 레이블을 기반으로 인덱싱을 한다. ○ DataFrame과 Series 상관없이 하나의 스칼라값에 접근한다. |
위치 인덱싱 | .iat[position] | 위치 정수를 기반으로 인덱싱을 한다. ○ DataFrame과 Series 상관없이 하나의 스칼라값에 접근한다. |
.ix 인덱서 | .ix[ ] | 레이블이나 위치 정수를 활용하여 인덱싱을 한다. ○ 유용할 것 같지만 둘 다 사용할 수 있다는 점 때문에 혼선이 생길 가능성이 높아지므로 사용은 지양된다. |
참고사항(대괄호 [ ]와 .loc, .iloc 메서드의 차이)
앞 포스팅에서 다루었던 대괄호[ ]는 레이블을 이용하여 열(column)을 선택하였다.
하지만 .loc, .iloc메서드는 행을 선택하며, DataFrame에서는 튜플을 이용해 하나의 요소도 선택이 가능하다.
각 인덱싱에 대한 사용 예제 |
이전 포스팅에서 대괄호를 이용하여 인덱싱 및 데이터 처리법에 대해 다루었으므로 본 포스팅에서는 대괄호에 대한 예제는 다루지 않는다.
각 메서드에 대한 상세사항은 추후 포스팅에서 다루도록 하고 본 포스팅에서는 간단한 사용 예를 다뤄보도록 한다.
레이블을 이용한 인덱싱 .loc 사용 예 |
.loc 메서드는 레이블을 기반으로 데이터에 접근한다.
따라서 정수가 아니라 반드시 레이블을 입력하여야 한다.
다음은 .loc 메서드를 사용한 예제이다.
.loc 메서드 사용 예제)
# 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
Out[5]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[6]: ex_df.loc['r1'] # 행에 대한 접근
Out[6]:
c0 3
c1 4
c2 5
Name: r1, dtype: int64
In[7]: ex_df.loc['r1', 'c0'] # 하나의 요소에 대한 접근
Out[7]: 3
위치 정수를 이용한 인덱싱 .iloc 사용 예 |
.iloc 메서드는 위치 정수를 이용하여 데이터에 접근한다.
따라서 반드시 정수를 입력하여야 한다.
다음은 .iloc 메서드를 사용한 예제이다.
.iloc 메서드 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# .iloc메서드 사용 예
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
Out[9]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[10]: ex_df.iloc[1] # 행에 대한 접근
Out[10]:
c0 3
c1 4
c2 5
Name: r1, dtype: int64
In[11]: ex_df.iloc[1, 2] # 하나의 요소에 접근
Out[11]: 5
슬라이싱[ : ] 사용 예 |
파이썬에서 제공하는 슬라이싱을 pandas에서도 사용할 수 있다.
다음은 슬라이싱을 사용한 예제이다.
슬라이싱 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 DataFrame 생성
In[12]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
In[13]: ex_df
Out[13]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[14]: ex_df.loc['r0':'r1','c1':'c2']
Out[14]:
c1 c2
r0 1 2
r1 4 5
# .iloc 메서드 슬라이싱
In[15]: ex_df.iloc[ : ,1:2]
Out[15]:
c1
r0 1
r1 4
r2 7
# 대괄호 [ ] 슬라이싱
In[16]: ex_df['r1':'r2']
Out[16]:
c0 c1 c2
r1 3 4 5
r2 6 7 8
참고사항(loc, iloc 메서드의 차이)
.loc 메서드는 레이블을 기반으로 데이터에 접근한다.
.iloc 메서드는 위치 정수를 기반으로 데이터에 접근한다.
불린 인덱싱 사용 예 |
pandas에서는 불린 인덱싱을 이용하여 특정 조건에 맞는 데이터만 추출하는 것이 가능하다.
다음은 불린 인덱싱을 사용한 예제이다.
불린 인덱싱 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 DataFrame 생성
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
Out[18]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[19]: ex_df[ex_df%2 ==0]
Out[19]:
c0 c1 c2
r0 0.0 NaN 2.0
r1 NaN 4.0 NaN
r2 6.0 NaN 8.0
레이블을 이용한 인덱싱 .at 사용 예 |
.loc 메서드와 마찬가지로 레이블을 통해 데이터에 접근한다.
.loc 메서드는 하나의 행에도 접근이 가능했다.
하지만 이 메서드는 .loc와는 다르게 하나의 요소에만 접근할 수 있다.
.at 메서드 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 DataFrame 생성
In[20]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
In[21]: ex_df
Out[21]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[22]: ex_df.at['r2','c0']
Out[22]: 6
위치 정수를 이용한 인덱싱 .iat 사용 예 |
.iloc 메서드와 마찬가지로 위치정수 통해 데이터에 접근한다.
.iloc 메서드는 하나의 행에도 접근이 가능했다.
하지만 이 메서드는 .iloc와는 다르게 하나의 요소에만 접근할 수 있다.
.iat 메서드 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 DataFrame 생성
In[23]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
In[24]: ex_df
Out[24]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[25]: ex_df.iat[0, 1]
Out[25]: 1
.ix 인덱서 사용 예 |
.ix 인덱서는 레이블과 위치정수 둘 다 사용하여 데이터에 접근이 가능하다.
즉, .loc 및 .iloc 메서드를 합쳐놨다고 봐도 무방하다.
불린 인덱싱 사용 예제)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 DataFrame 생성
In[26]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
In[27]: ex_df
Out[27]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 6 7 8
In[28]: ex_df.ix[0]
Out[28]:
c0 0
c1 1
c2 2
Name: r0, dtype: int64
In[29]: ex_df.ix['r2']
Out[29]:
c0 6
c1 7
c2 8
Name: r2, dtype: int64
주의사항
.ix 인덱서는 레이블과 위치정수를 둘 다 사용할 수 있다는 장점이 있다.
하지만, 둘 다 사용할 수 있다는 것은 혼동을 일으키기 쉽다는 단점이 있기 때문에, 사용하는 것은 지양된다.
그리고, 0.25.1 버전 기준으로 사용 시 사용하지 말라고 경고가 뜬다.
|
|
|
| 참고자료 https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
.iloc 메서드(정수 위치)를 이용한 인덱싱과 슬라이싱-pandas(12) (0) | 2019.10.21 |
---|---|
.loc 메서드(레이블)를 이용한 인덱싱과 슬라이싱-pandas(11) (0) | 2019.10.20 |
데이터 및 열 선택, 배정, 추가, 인덱싱, pop 및 insert 메서드-pandas(9) (0) | 2019.10.18 |
데이터 추출(array, to_numpy, values)-pandas(8) (0) | 2019.10.17 |
데이터 정보 확인(index, columns, shape) - pandas(7) (0) | 2019.10.16 |
댓글