반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- SQL
- array
- Redshift
- 파이썬
- Mac
- math
- django
- PySpark
- Google Excel
- matplotlib
- Github
- PostgreSQL
- Java
- gas
- GIT
- string
- Tkinter
- list
- Google Spreadsheet
- PANDAS
- dataframe
- c#
- Apache
- numpy
- Excel
- Python
- Kotlin
- hive
- google apps script
Archives
- Today
- Total
달나라 노트
Python Pandas : where & mask (값 필터링하여 바꾸기) 본문
728x90
반응형
Pandas where() — 조건을 만족하지 않는 값을 바꾸는 메서드
비유로 먼저 이해하기
교통 신호등을 생각해보세요.
초록불(조건 True)이면 그대로 통과, 빨간불(조건 False)이면 멈추고 다른 값으로 대체됩니다.
where()은 이렇게 작동합니다.
"조건을 만족하는 값은 그대로, 아닌 값은 지정한 값으로 바꿔라"
clip()이 범위를 잘라내는 도구라면, where()은 조건식으로 원하는 값만 골라내는 도구입니다.기본 문법
Series.where(cond, other=nan)
DataFrame.where(cond, other=nan)
| 파라미터 | 설명 |
|---|---|
cond |
True인 위치는 원래 값 유지, False인 위치는 대체 |
other |
False인 위치에 채울 값 (기본값: NaN) |
예시 1 — 기본 사용
import pandas as pd
s = pd.Series([10, -3, 7, -1, 5])
s.where(s > 0)
# 0 10.0
# 1 NaN ← 조건 False → NaN으로 대체
# 2 7.0
# 3 NaN ← 조건 False → NaN으로 대체
# 4 5.0
other를 지정하면 NaN 대신 원하는 값으로 채울 수 있습니다.
s.where(s > 0, other=0)
# 0 10
# 1 0 ← -3 → 0
# 2 7
# 3 0 ← -1 → 0
# 4 5
예시 2 — 문자열 조건
import pandas as pd
grade = pd.Series(['A', 'B', 'F', 'A', 'F', 'C'])
grade.where(grade != 'F', other='재시험')
# 0 A
# 1 B
# 2 재시험 ← F → 재시험
# 3 A
# 4 재시험 ← F → 재시험
# 5 C
예시 3 — DataFrame에 적용
import pandas as pd
df = pd.DataFrame({
'점수': [85, 42, 91, 38, 76],
'출석': [95, 60, 88, 55, 72],
})
# 점수와 출석 모두 70 이상인 경우만 유지
df.where(df >= 70)
# 점수 출석
# 0 85.0 95.0
# 1 NaN NaN ← 42, 60 모두 탈락
# 2 91.0 88.0
# 3 NaN NaN ← 38, 55 모두 탈락
# 4 76.0 72.0
예시 4 — 다른 Series로 대체
other에 값 대신 다른 Series를 넘길 수 있습니다.
조건을 만족하지 않는 위치를 다른 컬럼의 값으로 채우는 식으로 활용합니다.
import pandas as pd
actual = pd.Series([100, -5, 80, -20, 60])
fallback = pd.Series([0, 0, 0, 0, 0])
actual.where(actual >= 0, other=fallback)
# 0 100
# 1 0 ← -5 → fallback[1]
# 2 80
# 3 0 ← -20 → fallback[3]
# 4 60
where() vs mask()
mask()는 where()의 정반대입니다.
s = pd.Series([10, -3, 7, -1, 5])
s.where(s > 0, 0) # 조건 True → 유지, False → 0
# [10, 0, 7, 0, 5]
s.mask(s > 0, 0) # 조건 True → 0, False → 유지
# [ 0, -3, 0, -1, 0]
한 줄 요약:
where는 "조건 맞으면 살리고", mask는 "조건 맞으면 죽인다".where() vs clip()
clip() |
where() |
|
|---|---|---|
| 기준 | 범위(상한/하한) | 조건식 |
| 유연성 | 숫자 범위에 특화 | 어떤 조건이든 가능 |
| 대표 용도 | 이상치 범위 제한 | 조건부 값 대체 |
# 아래 두 코드는 같은 결과
s.clip(lower=0)
s.where(s >= 0, other=0)
정리
| 상황 | 코드 |
|---|---|
| 음수를 NaN으로 | s.where(s >= 0) |
| 음수를 0으로 | s.where(s >= 0, 0) |
| 특정 문자열 대체 | s.where(s != 'F', '재시험') |
| 조건 불만족 시 다른 컬럼 값으로 | df['A'].where(cond, df['B']) |
| 반대 방향 (조건 만족 시 대체) | s.mask(cond, other) |
where()는 단순한 범위 제한을 넘어, 어떤 조건이든 자유롭게 걸어서 값을 선택적으로 바꿀 수 있는 범용 필터링 도구입니다.
728x90
반응형
'Python > Python Pandas' 카테고리의 다른 글
| Python Pandas : std() — 표준편차를 계산하는 메서드 (0) | 2026.05.14 |
|---|---|
| Python Pandas : Series .values vs .to_numpy() (0) | 2026.05.14 |
| Python Pandas : clip (최대 최소값 제한하기) (0) | 2026.05.12 |
| Python Pandas : info(), memory_usage() (DataFrame의 memory 사용량 보기) (0) | 2026.05.06 |
| Python Pandas : dtypes (column의 data type 출력, column data type 확인) (0) | 2025.09.28 |
Comments
