[Pandas] where() - 조건을 만족하는 값은 살리고, 아니면 치환

2025. 4. 29. 09:30·python/Pandas | Numpy
728x90

일반적으로 데이터를 필터링하면 조건에 맞는 행만 추출하게 됩니다. (query(), Boolean Indexing 등)

하지만 때로는 조건을 만족하는 값은 유지하고, 만족하지 않는 값은 다른 값으로 바꿔야 하는 경우가 있습니다.

 

예를 들어:

  • 점수가 70점이상이면 그대로 두고, 70 미만이면 '재시험'이라고 표시
  • 결측치는 그래도 두고, 음수 값만 0으로 치환
  • 특정 범위를 벗어난 값만 수정

이럴 때 Pandas의 where() 함수가 진가를 발휘합니다.

 

예제 데이터

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'score': [85, 67, 90, 45]
})


기본 문법

DataFrame.where(cond, other=NaN, inplace=False)
Series.where(cond, other=NaN, inplace=False)
  • cond : True / False 조건
  • other : 조건이 False일 때 바꿀 값
  • inplace : True 설정 시 원본 수정

 

1. 예제: 70점 이상은 유지, 아니면 '재시험'

df['result'] = df['score'].where(df['score'] >= 70, other='재시험')

→ 조건을 만족하는 곳은 원래 값 유지, 아니면 '재시험'으로 치환

 

2. 예제: 음수 값만 0으로 수정

data = pd.Series([10, -5, 15, -2, 20])
data_fixed = data.where(data >= 0, other=0)

 

 

3. 예제: 다중 조건 처리

df['pass'] = df['score'].where((df['score'] >= 70) & (df['score'] <= 100), other='불합격')

→ 70 이상 100 이하인 경우만 통과, 나머지는 '불합격'

 

4. 예제: 결측치(NaN)는 건드리지 않고 음수만 수정

s = pd.Series([10, np.nan, -5, 20])
s_fixed = s.where((s >= 0) | (s.isna()), other=0)

→ 0 이하인 값은 전부 0으로 치환 (음수/0 제거 패턴)


주의사항

이슈 설명
where()는 필터링이 아니다 행을 삭제하지 않음, 값을 변경하는 것임
기본 other=NaN 조건이 False면 NaN이 들어간다 (별도 지정 필요)
조건 제대로 확인해야 함 반대로 쓰면 원치 않은 결과 나올 수 있음

 

 

Pandas의 where()는 필터링이 아니라 수정이빈다.
조건을 만족하면 살리고, 만족하지 않으면 바꾼다는 패턴을 기억해야합니다.
복잡한 데이터 전처리, 품질 검사, 이상치 수정 등에 where()는 매우 강력한 무기가 될 수 있습니다.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'python > Pandas | Numpy' 카테고리의 다른 글

[Numpy] percentile() - 백분위수 구하기  (0) 2025.05.02
[Pandas] clip() - 이상값 방어의 핵심  (0) 2025.05.02
[Pandas] applymap() - DataFrame 전체 셀에 함수를 적용  (0) 2025.04.29
[Pandas] map() (조건 라벨링, 값 변환, 딕셔너리 매핑까지 Series 변환의 핵심)  (0) 2025.04.24
[Pandas] explode() (리스트가 들어있는 셀 행마다 분해)  (1) 2025.04.24
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Numpy] percentile() - 백분위수 구하기
  • [Pandas] clip() - 이상값 방어의 핵심
  • [Pandas] applymap() - DataFrame 전체 셀에 함수를 적용
  • [Pandas] map() (조건 라벨링, 값 변환, 딕셔너리 매핑까지 Series 변환의 핵심)
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (146)
      • 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)
      • 마음가짐 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Pandas] where() - 조건을 만족하는 값은 살리고, 아니면 치환
상단으로

티스토리툴바