[Python] 위치기반 인덱싱(iloc)과 레이블 기반 인덱싱(loc)

전도운·2024년 8월 1일
0
post-custom-banner

데이터 일부를 추출하는 방법은 크게 위치(index) 기반 또는 레이블(label) 기반 방법으로 나뉜다. 본 글에서는 판다스 시리즈와 데이터프레임에서 이를 정확히 사용하는 법을 정리한다.

  • 요약

    • 인덱싱의 원칙은 그 방법이 위치 기반이든 레이블 기반이든 컴퓨터가 이해하기에 명확하게 명령해야 한다는 것이다.

    • 입력값이 위치인지 레이블인지 분명하지 않게 인덱싱을 하는 경우 오류가 발생하며, 이를 명확히 하기 위해 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' 기준 인덱싱
profile
의미 있는 한걸음을 추구합니다.
post-custom-banner

0개의 댓글