파이썬/데이터프레임 다루기

Pandas 불리언 인덱싱에서 괄호는 언제 써야 할까?

Data Jun 2025. 8. 30. 18:22

Pandas로 데이터를 다루다 보면 불리언 인덱싱(Boolean Indexing) 을 자주 사용합니다.
이때 헷갈리기 쉬운 것이 바로 조건문에 괄호를 꼭 써야 하는지 여부입니다.

 

불리언 인덱싱 기본

예를 들어, 나이(age) 컬럼에서 20보다 큰 값만 필터링하고 싶다면:

import pandas as pd

df = pd.DataFrame({"age":[15, 25, 35, 45]})

df[df["age"] > 20]

 

두 조건 이상 결합할 때

문제는 조건을 여러 개 결합할 때입니다.

# ❌ 괄호 없이 쓰면 에러
df[df["age"] > 20 & df["age"] < 40]
# ValueError: The truth value of a Series is ambiguous

이유: 파이썬에서 비교 연산자(>, <)비트 연산자(&, |)우선순위가 달라서 Series 비교가 제대로 동작하지 않기 때문입니다.

 

올바른 방법: 괄호 사용

# ✅ 괄호로 묶어주면 정상 동작
df[(df["age"] > 20) & (df["age"] < 40)]

 

조건을 변수에 담은 경우

조건을 변수에 먼저 저장하면 괄호가 필요 없습니다.

cond = df["age"] > 20
df[cond & (df["age"] < 40)]   # cond는 이미 불리언 Series이므로 괄호 불필요

 

정리

  • 직접 조건식을 쓸 때 → 괄호 꼭 필요
  • 조건을 변수에 담아 쓸 때 → 괄호 없어도 됨

 

한눈에 보기

따라서 조건을 직접 작성할 때는 반드시 괄호를 써야 하고, 변수로 담아둘 경우엔 괄호 없이도 안전합니다.