728x90
데이터를 다루는 데 있어 가장 기본이자 가장 중요한 작업은 필요한 데이터를 정확히 뽑아오는 것 입니다.
Pandas에서는 이를 위해 loc 와 iloc 두 가지 인덱싱 방법을 제공하는데,
이 둘은 비슷해 보이지만 동작 방식과 개념이 완전히 다르다.
| 구분 | loc | iloc |
| 기준 | 라벨(Label) 기반 | 위치(Position) 기반 |
| 인덱스 | 숫자일 수도 있고 문자일수도 있음 | 무조건 0부터 시작하는 정수 위치 사용 |
| 사용법 | df.loc[행 라벨, 열 라벨] | df.iloc[행 번호, 열 번호] |
예제 DataFrame
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'score': [88, 92, 85]
}, index=['u1', 'u2', 'u3'])
df

loc – 라벨(Label) 기반 인덱싱
- 특정 행/열 접근
df.loc['u1', 'name'] # → 'Alice'
- 여러 열 선택
df.loc['u1', ['name', 'score']]
- 여러 행, 여러 열 슬라이싱
df.loc[['u1', 'u3'], ['name', 'score']]
- 전체 행에서 특정 열만
df.loc[:, 'score']
iloc – 위치(Position) 기반 인덱싱
- 특정 위치의 값 가져오기
df.iloc[0, 0] # → 'Alice'
- 위치로 행/열 선택
df.iloc[0, [0, 2]] # 첫 번째 행에서 첫 번째와 세 번째 열
- 행 슬라이싱
df.iloc[1:3] # 두 번째부터 세 번째 행까지
- 열 슬라이싱
df.iloc[:, 1:] # 모든 행, 두 번째 열부터 끝까지
여기서 자주 하는 실수 중에 하나가
loc와 iloc 혼용하는 경우가 있으니 주의하시기 바랍니다.
- loc은 항상 라벨을 보고, iloc은 항상 0부터 시작하는 번호를 본다.
사용 예제
1: 조건에 맞는 사용자 이름만 가져오기
df[df['score'] > 90].loc[:, 'name']

2: 상위 2명 이름과 점수만 보기
df.iloc[:2, [0, 2]]

인덱싱은 Pandas에서 데이터 추출, 수정, 분석의 가장 기초가 되는 기능이다.
loc과 iloc을 정확히 구분해서 써야 예상치 못한 오류나 잘못된 분석 결과를 방지할 수 있다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
| [Pandas] 데이터 타입 확인 및 변환 – dtypes, astype() (0) | 2025.04.24 |
|---|---|
| [Pandas] 결측치(NaN) 처리 (0) | 2025.04.24 |
| [Pandas] 정렬과 순위 매기기 – sort_values, rank (0) | 2025.04.24 |
| [Pandas] Boolean Indexing (조건 필터링) (0) | 2025.04.24 |
| [Pandas] Series와 DataFrame (0) | 2025.04.24 |
