판다스(Pandas)로 데이터를 다루다 보면 lociloc 중 무엇을 써야 할지 막막할 때가 있죠. 둘 다 행과 열을 선택하는 데 쓰이지만, 내부 동작 방식의 미묘한 차이가 결과를 완전히 바꿔버리거나 에러를 일으키기도 합니다. 이번 글에서는 학생 성적 데이터를 예시로, 두 메서드의 핵심 차이와 언제 어떤 것을 사용해야 하는지 실전 예제와 함께 알아보겠습니다. 자세한 근거자료는 원문에서 확인할 수 있어요.

Python code on a screen with pandas library Development Concept Image

핵심 개념: 레이블(loc) vs 위치(iloc)

loc은 **행과 열의 레이블(이름)**을 기반으로 데이터를 선택합니다. 반면 iloc은 **행과 열의 정수 위치 인덱스(0부터 시작)**를 사용합니다. 이 차이가 모든 것을 결정해요.

먼저, 간단한 데이터프레임을 준비하고 인덱스를 설정해보겠습니다.

import pandas as pd

# 예시 데이터 생성
data = {
    'student_id': [101, 102, 103, 104, 105],
    'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Edward'],
    'math': [85, 58, 92, 76, 88],
    'english': [90, 64, 78, 81, 95],
    'science': [92, 70, 85, 79, 91]
}
df = pd.DataFrame(data)

# 'student_id'를 인덱스로 설정
df.set_index('student_id', inplace=True)
print(df)

이제 lociloc을 사용해 동일한 데이터(예: Bob의 정보)를 추출해보죠.

# loc 사용: 레이블(102)로 선택
bob_loc = df.loc[102]
print("loc 결과:")
print(bob_loc)
print()

# iloc 사용: 위치(1)로 선택 (인덱스 0부터 시작)
bob_iloc = df.iloc[1]
print("iloc 결과:")
print(bob_iloc)

결과는 동일하게 Bob의 정보가 출력되지만, 선택의 논리가 다릅니다. loc은 'student_id'가 102인 레이블을 찾고, iloc은 단순히 두 번째 행(위치 1)을 가져옵니다.

Data analysis visualization chart Dev Environment Setup

실무에서 자주 쓰이는 활용 패턴

1. 여러 행/열 동시에 선택하기

리스트를 사용해 여러 레이블이나 위치를 지정할 수 있습니다.

# loc: 레이블 리스트로 여러 학생 선택
selected_loc = df.loc[[101, 103, 105]]

# iloc: 위치 리스트로 여러 학생 선택
selected_iloc = df.iloc[[0, 2, 4]]

2. 슬라이싱(Slicing)의 중요한 차이

슬라이싱에서 loc끝 레이블을 포함하고, iloc끝 위치를 제외합니다(일반 파이썬 슬라이싱과 동일).

# loc 슬라이싱 (101부터 103까지 '포함')
sliced_loc = df.loc[101:103]

# iloc 슬라이싱 (0부터 3까지, 위치 3은 '제외')
sliced_iloc = df.iloc[0:3]

이 차이점을 이해하지 않으면 데이터 chunk를 나눌 때 중복이나 누락이 발생할 수 있으니 주의가 필요해요.

3. 불리언 필터링(Boolean Filtering)

조건에 맞는 행을 필터링할 때는 loc이 훨씬 직관적입니다.

# 수학 점수가 80점 이상인 학생들
high_math = df.loc[df['math'] > 80]

# 수학 > 70 그리고 과학 > 80인 학생들
high_scores = df.loc[(df['math'] > 70) & (df['science'] > 80)]

iloc으로 같은 작업을 하려면 불리언 시리즈를 리스트로 변환하는 번거로운 과정이 필요합니다.

Developer working on a laptop with code editor System Abstract Visual

결론: 그래서 언제 뭘 써야 하나요?

  • loc을 써야 할 때: 데이터프레임에 의미 있는 레이블(예: 학생ID, 날짜)이 있고, 그 레이블을 기준으로 데이터를 선택하거나 필터링할 때. 코드 가독성이 중요하고, 불리언 필터링이 필요할 때.
  • iloc을 써야 할 때: 레이블이 없거나 무의미할 때(단순 0,1,2...), 데이터의 절대적 위치(예: 처음 100행, 마지막 10행)에 관심이 있을 때. 레이블이 중복되거나 변경될 가능성이 있어 코드를 견고하게 만들고 싶을 때.

핵심은 loc은 '이름으로 부르는 것', iloc은 '번호로 부르는 것'이라고 생각하시면 됩니다. 데이터의 특성과 작업 목적에 맞게 선택하는 습관을 들이면, 판다스로 데이터를 다루는 효율이 크게 올라갈 거예요. 이 글의 예제 코드를 직접 실행해보시고 느낌을 익히는 것을 추천합니다!