본문 바로가기
Python/Pandas

.ix 메서드를 이용한 인덱싱-pandas(13)

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

파이썬 버전 3.7 기준

pandas 버전 0.25.1 기준



 .ix 인덱서를 이용한 인덱싱


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

사실 .ix인덱서는 최근 버전에들어서는 사용하지 말 것을 권하고 있으며, 앞으로 사라질 가능성이 크다.



 .ix 메서드에 대한 설명


.ix 메서드는 기본적으로 레이블(label)과 위치 정수를 사용하여 행에 접근하는 메서드이다.

하지만 최근 pandas 버전에서는 .ix 메서드의 사용을 하지 말 것을 권하고 있다.

  ○ 대화형 모드에서 .ix 인덱서를 사용할 경우 인덱싱은 되긴 하지만 경고가 뜬다.

  ○ 그 이유로는 레이블과 위치 정수 둘 다 사용할 수 있다는 장점이 있지만, 인덱싱을 할때 모호해지기 때문이다.

    ▷ 이런 모호성은 유저들에게 혼동을 줄 가능성이 크고 여태 많은 문제를 야기시켰다고 한다.



 .ix 메서드의 특징

.ix 메서드에 대한 특징은 다음과 같다. 

  ○ 레이블과 위치정수를 이용한 인덱싱이 가능하다.

  ○ 불린 배열(boolean array)과 함께 사용될 수 있다. 

  ○ 위치정수던 레이이블이던 간에 해당 객체를 찾을 수 없을 경우 KeyError를 발생시킨다.

    ▷ 단 슬라이싱은 예외이다.

  ○ 슬라이싱 할 경우 레이블을 사용하면 .loc와 동일하게, 위치 정수를 사용할 경우 .iloc와 동일하게 적용된다.

    ▷ .loc 처음과 끝이 포함된다.

    ▷ .iloc 처음이 포함되고 끝은 포함이 안된다.



 .ix 메서드의 사용법

.ix 메서드는 .loc와 .iloc와 동일하게 뒤에 대괄호를 붙여 사용한다. 

구문 형식은 다음과 같다.


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

# Series에서의 사용

  Series.ix[ index ]  # Series에서의 요소 선택 


# DataFrame에서의 사용

  DataFrame.ix[ index ]                         # 행의 선택 

  DataFrame.ix[ index, column ]   # 하나의 요소 선택 


index은 행을 선택하기 위한 인덱스의 레이블과 위치 정수 둘다 입력이 가능하다.

column은 행 선택 이후 해당 행에서 요소를 선택하기 위한 열의 레이블과 위치 정수을 입력받는다.

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


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

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

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



 .ix 메서드의 입력 자료형

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

   하나의 레이블혹은 위치정수(예: 5, 'a' 등) 

   레이블 및 위치정수의 리스트(list) (예: ['a', 'b', 'c'] )

   레이블 및 위치정수의 슬라이스 객체 (예: 'a':'f')

   불린(boolean) 배열 (예: [True, False])

   callable 함수

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



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

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

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

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

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

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

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

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




 .ix 사용 예


.ix메서드의 사용법은 .loc 및 .iloc 메서드와 거의 동일하다.

또한, 앞으로 .ix 메서드는 사라지게 될 가능성이 크다.

따라서 많은 본 포스팅에서는 많은 예제를 다루지는 않을 것이다.



 행의 선택

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


행의 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


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

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.ix[1]

Out[5]: 

c0    3

c1    4

c2    5

Name: r1, dtype: int64


n[6]: ex_df.ix['r1']

Out[6]: 

c0    3

c1    4

c2    5

Name: r1, dtype: int64



 DataFrame에서의 하나의 요소 선택

아래 예제는 위치정수와 레이블을 이용하여 하나의 요소를 선택하는 예제이다.


요소 선택 예)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# .ix메서드를 사용하여 요소를 선택하는 예

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

In[8]: ex_df.ix[1,2]         # 위치정수의 사용

Out[8]: 5


In[9]: ex_df.ix['r1','c2']     # 레이블의 사용

Out[9]: 5


In[10]: ex_df.ix[1,'c2']     # 위치정수와 레이블의 혼합 사용

Out[10]: 5


이 외에 .loc와 .iloc 메서드에서 사용하였던 슬라이싱, 불린배열, callable 함수 등이 사용이 가능하다.



반응형

댓글