본문 바로가기
스터디/데이터사이언스

[Pandas] iloc와 loc 차이점

by 궁금한 준이 2023. 4. 12.
728x90
반응형

Setup

(1) Import libraries

import numpy as np
import scipy as sp
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

(2) load data

data = sns.load_dataset('diamonds')
data

diamonds dataset

Filtering the data

가격이 2600 이상인 데이터만 선택하자. 이때 reset_index()를 하지 않은 상태에서 비교를 할 것이다.

data_selected = data[data['price'] >= 2600]
data_selected

price가 2600 이상인 데이터만 선택

loc

Access a group of rows and columns by label(s) or a boolean array.

loc의 인덱스는 label 기반으로 동작한다.

row 인덱슨느 500:100, column 인덱스는 ['color', 'clarity', 'price']로 데이터를 필터링해보자.

data_selected.loc[50:100, ['color', 'clarity', 'price']]

결과를 보면, row index에 50:100 중 존재하는 경우인 [90:100]이 출력되는 것을 볼 수 있다.

따라서 label 기반 인덱싱인 loc는 시작과 끝이 모두 포함된다. 

 

iloc

Purely integer-location based indexing for selection by position.

그냥 일반적인 파이썬 인덱싱과 동일하다. 2차원 행렬에 숫자 인덱스로 접근하는 방법이다.

data_selected.iloc[50:60, [1, 2, 6]]

data_selected의 row는 [50:60)이고 column 인덱스는 [1, 2, 6]번째를 필터링한 것이다.

숫자 인덱싱은 (프로그램의 전통을 따라) 0부터 시작한다. 파이썬 인덱싱과 동일하게 시작은 포함하되 끝은 포함하지 않는다. 

data_selected의 (인덱싱 상) 50번째 row는 [140, Premium, G, 2766]이므로 저기부터 출력된다.

iloc는 numpy.array로 변환했을 때의 인덱싱과 완전히 동일하다.

array = data_selected.to_numpy()
array[50:60, [1, 2, 6]]

array([['Premium', 'G', 2766],
       ['Premium', 'G', 2766],
       ['Very Good', 'D', 2767],
       ['Very Good', 'F', 2767],
       ['Ideal', 'D', 2767],
       ['Good', 'H', 2767],
       ['Very Good', 'G', 2768],
       ['Very Good', 'D', 2768],
       ['Very Good', 'D', 2768],
       ['Ideal', 'E', 2768]], dtype=object)

 

728x90
반응형