pandas에서 데이터를 추출할 때 가장 많이 사용하는 lociloc의 핵심 차이는 데이터를 찾는 기준에 있다.

 

1. loc (Label-based)

loc는 명칭(Label)을 기반으로 데이터를 추출한다. 즉, 눈에 보이는 인덱스 이름과 컬럼 이름을 직접 사용한다.

  • 인덱싱 방식: 행 이름, 열 이름을 사용한다.
  • 슬라이싱 범위: 시작점과 끝점을 모두 포함한다. (예: 'A':'C'는 A, B, C를 모두 포함)
  • 사용 예시: df.loc[0:3, 'name'] (인덱스 이름이 0부터 3인 행의 'name' 컬럼 추출)

 

2. iloc (Integer position-based)

iloc는 정수 위치(Integer position)를 기반으로 데이터를 추출한다. 파이썬의 리스트 인덱싱과 동일한 방식이다.

  • 인덱싱 방식: 0부터 시작하는 행과 열의 순서(번호)를 사용한다.
  • 슬라이싱 범위: 시작점은 포함하되 끝점은 포함하지 않는다. (예: 0:3은 0, 1, 2번 인덱스만 포함)
  • 사용 예시: df.iloc[0:3, 0] (0번부터 2번 위치까지의 행과 0번째 컬럼 추출)

 

3. 비교 요약표

구분 loc iloc
주요 기준 레이블(이름) 기반 위치(정수 번호) 기반
슬라이싱 끝점 포함 ( [start:stop] → stop 포함 ) 끝점 제외 ( [start:stop] → stop-1 까지 )
행 선택 인덱스 이름 (예: 'row1', 100) 행의 순서 (예: 0, 1, 2)
열 선택 컬럼 이름 (예: 'age', 'city') 열의 순서 (예: 0, 1, 2)

 

4. 주의사항 (인덱스가 숫자인 경우)

데이터프레임의 인덱스가 정수(0, 1, 2...)로 되어 있을 때 가장 헷갈리기 쉽다.

  • df.loc[1]: 인덱스 이름이 1인 데이터를 찾는다.
  • df.iloc[1]: 위에서부터 **두 번째(0, 1)**에 위치한 데이터를 찾는다.

만약 데이터 정렬이나 삭제 후에 인덱스 순서가 뒤섞였다면, 두 함수의 결과값은 완전히 달라지게 된다. 따라서 위치 기반으로 확실하게 데이터를 가져오고 싶을 때는 iloc를, 특정 이름을 가진 데이터를 찾을 때는 loc를 사용하는 것이 안전하다.

 

 

+ Recent posts