[Pandas] Boolean Indexing (조건 필터링)

2025. 4. 24. 10:23·python/Pandas | Numpy
728x90

데이터 분석에서 우리가 가장 먼저 하고 싶은 건 "내가 원하는 조건에 맞는 데이터만 뽑아보기"다.
이때 Pandas에서는 Boolean Indexing이라는 강력한 기능을 제공한다.

조건에 맞는 행(row)만 필터링하는 이 방식은 단순한 것 같지만,
조금만 복잡해져도 괄호 문제, 논리 연산자 오류, 결측치 때문에 자주 실수하게 된다.

 

Boolean Indexing

Boolean Indexing은 조건식을 통해 True/False 마스크를 생성하고,
이 마스크를 통해 원하는 행만 필터링하는 방식이다.

 

우선 df를 만들어서 사용 예제를 확인해하겠습니다.

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 30, 35, 40],
    'score': [88, 92, 85, 70]
})

df[df['age'] > 30]

위 코드는 age가 30보다 큰 사람만 필터링한다.


단일 조건 필터링

df[df['score'] >= 90]

→ score가 90 이상인 사람만 출력

 

다중 조건 필터링 – AND (&), OR (|)

df[(df['age'] > 30) & (df['score'] >= 85)]
df[(df['name'] == 'Alice') | (df['score'] < 80)]

 

주의: 반드시 조건식을 괄호로 감싸야 한다.
&, |는 Python의 기본 and, or과 다르게 작동하며, Pandas에서는 괄호 필수!


문자열 조건 필터링

df[df['name'].str.contains('a', case=False)]

→ 이름에 'a'가 포함된 행만 추출 (대소문자 무시)

 

isin() – 여러 값 중 포함 여부 체크

df[df['name'].isin(['Alice', 'David'])]

→ 이름이 Alice 또는 David인 사람만 추출

 

notna() – 결측치(NaN) 제거 조건

df[df['score'].notna()]

실무에서는 종종 score 컬럼에 NaN이 있을 수 있으니, 분석 전에 notna로 걸러주는 게 안전하다.

 

between() – 범위 조건 필터링

df[df['age'].between(30, 40)]

→ age가 30 이상 40 이하인 행만 추출

 


예제: 30대 중 점수가 85 이상인 사용자

df[(df['age'] >= 30) & (df['age'] < 40) & (df['score'] >= 85)]

 

자주 하는 실수

[오류] 괄호 없이 & 또는 | 사용

df[df['age'] > 30 & df['score'] > 85]  # 오류 발생

 

[성공] 올바른 작성

df[(df['age'] > 30) & (df['score'] > 85)]

실수 방지를 위해 조건마다 괄호를 친다고 습관 들이는 것이 좋다.

 


필터링 결과 컬럼 선택까지 함께 하기

df.loc[(df['score'] >= 85), ['name', 'score']]

→ 조건에 맞는 행의 일부 열만 가져오는 실무 패턴

 

Boolean Indexing은 Pandas에서 가장 많이 쓰이는 기능이지만,
기초 문법을 모른 채 실무에 쓰면 괄호 오류, 타입 오류 등으로 쉽게 무너진다.

&, |, isin(), between(), notna() 등을 숙지하면
어지간한 필터링 조건은 다 커버할 수 있다.

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] 인덱싱 – loc vs iloc  (0) 2025.04.24
[Pandas] Series와 DataFrame  (0) 2025.04.24
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Pandas] 결측치(NaN) 처리
  • [Pandas] 정렬과 순위 매기기 – sort_values, rank
  • [Pandas] 인덱싱 – loc vs iloc
  • [Pandas] Series와 DataFrame
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (147) N
      • python (45)
        • selenium (4)
        • algorithm (9)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (29)
      • Data Scientist (3)
      • Data Analysis (9)
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (2) N
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Pandas] Boolean Indexing (조건 필터링)
상단으로

티스토리툴바