요약
인덱싱의 원칙은 그 방법이 위치 기반이든 레이블 기반이든 컴퓨터가 이해하기에 명확하게 명령해야 한다는 것이다.
입력값이 위치인지 레이블인지 분명하지 않게 인덱싱을 하는 경우 오류가 발생하며, 이를 명확히 하기 위해 iloc과 loc 사용을 습관화하는 것이 좋다.
판다스 시리즈
열이 하나인 데이터프레임이다. 예시로 titanic 데이터의 age 칼럼을 사용한다.
age = titanic.age age
iloc과 loc을 사용하지 않아도 인덱싱이 가능은 하다. age라는 시리즈가 존재할 때, 아래와 같은 인덱싱이 가능하다.
age[1] >> 38.0
그런데, [1]에서 1은 위치일까? 아니면 레이블일까? 이를 명확히 확인하는 방법은 -1 인덱싱을 해보는 것이다. 아래와 같은 코드를 실행해본다.
age[-1]
'-1이 범위에 없다'는 오류가 나온다. 위치인 경우 마이너스가 가능하므로, 대괄호 안의 값은 위치가 아니라 레이블인 것이 확인된다.
대신 아래와 같이 인덱싱하면 기준이 인덱스인지 레이블인지 명확해진다.
age.iloc[1] # 1번 인덱스 기준 인덱싱 age.loc[1] # 레이블 '1' 기준 인덱싱
판다스 데이터프레임
열이 두개 이상인 테이블이다.
아래와 같은 코드가 가능할까?
titanic[1]
키에러가 발생한다. 컴퓨터가 저 1이라는 숫자가 행 인덱스인지 열 인덱스인지 명확히 구분하지 못하는 것이다.
반면, 아래와 같이 칼럼명을 지정해주면 인덱싱이 가능하다. 'age'라는 인덱스는 열 인덱스에만 존재하는 유일한 레이블이기 때문이다.
titanic['age']
시리즈와 마찬가지로, iloc과 loc을 이용하여 인덱싱 기준을 명확히 할 수 있다.
titanic.iloc[-1, 2] # -1번 행인덱스, 2번 열인덱스 기준 인덱싱 titanic.loc[1, 'age'] # 행레이블 '1', 열레이블 'age' 기준 인덱싱