728x90
데이터를 전처리를 하다 보면 종종 이런 일이 생긴다:
- 나이에 200살이 들어와 있다.
- 점수가 110점으로 입력되어 있다.
- 상품 가격이 음수로 들어와 있다.
이런 이상값을 제거하거나, 상하한을 지정해서 데이터를 안전하게 자르는 작업이 필요하다.
이럴 때 Pandas의 clip() 은 최소값보다 작은 값은 최솟값으로, 최대값보다 큰 값은 최대값으로 잘라주는 함수다.
예제 데이터
import pandas as pd
df = pd.DataFrame({
'score': [95, 105, 85, 70, 30],
'age': [25, 180, 38, 200, -5]
})

기본 문법
Series.clip(lower=None, upper=None)
DataFrame.clip(lower=None, upper=None)
- lower : 최소 허용값 (이보다 작으면 잘라냄)
- upper : 최대 허용값 (이보다 크면 잘라냄)
1. 점수는 100점을 초과 불가 (예제)
df['score_clipped'] = df['score'].clip(upper=100)

2. 나이는 0 ~ 120 사이로 제한
df['age_clean'] = df['age'].clip(lower=0, upper=120)

3. DataFrame 전체에 clip 적용
df.clip(lower=0, upper=100)

4. 컬럼별 다른 기준으로 clip
df_clipped = df.clip(lower={'score': 60, 'age': 0}, upper={'score': 100, 'age': 120})

| 주의점 | 설명 |
| clip()은 원본 수정 X | 결과는 새로운 객체, 원본을 수정하려면 재할당 필요 |
| lower, upper 둘 다 없으면 효과 없음 | 둘 중 하나라도 지정해야 작동 |
| 범위를 넘는 값을 자동으로 바꾼다 | 삭제가 아닌 수정 → 통계 결과에 반영됨 |
| 컬럼별로 다르게 설정할 땐 Series 사용 | dict형태도 가능하지만 Series가 더 안전 |
clip()은 Pandas에서 이상값을 자동으로 잘라주는 가장 빠른 도구다.
특히 점수, 나이, 가격 등 상하한이 명확한 데이터를 다를 때 필수적으로 사용되며,
조건 기반 삭제 없이도 데이터를 안전하게 정제할 수 있는 실무 필수 함수다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
| [Numpy] ndarray 구조 - 배열의 모양, 차원 ,타입 (0) | 2025.05.02 |
|---|---|
| [Numpy] percentile() - 백분위수 구하기 (0) | 2025.05.02 |
| [Pandas] where() - 조건을 만족하는 값은 살리고, 아니면 치환 (0) | 2025.04.29 |
| [Pandas] applymap() - DataFrame 전체 셀에 함수를 적용 (0) | 2025.04.29 |
| [Pandas] map() (조건 라벨링, 값 변환, 딕셔너리 매핑까지 Series 변환의 핵심) (0) | 2025.04.24 |
