Pandas 결측치 처리: isna, fillna, dropna 선택 기준

Pandas 결측치는 isna()로 위치와 개수를 확인한 뒤, 열의 의미에 따라 삭제·유지·대체를 결정합니다. 결측치 비율만으로 행이나 열을 지우는 보편적인 정답은 없습니다.

삭제하기 전에 확인할 질문

누락이 시스템 장애인지, 해당되지 않는 값인지, 아직 입력되지 않은 값인지 구분하세요. 특히 매출 0과 매출 미확인은 서로 다른 정보입니다. 식별번호가 없을 때와 선택 항목이 비어 있을 때도 같은 규칙으로 처리하면 안 됩니다.

작은 표로 처리 결과 확인하기

Python 3와 Pandas가 필요합니다. python -m pip install pandas로 설치한 뒤 실행하세요. 아래는 필수 식별자가 없는 행은 제외하고, 지역 미입력은 별도 범주로 표시하며, 금액 누락은 그대로 보존하는 예제입니다.

import pandas as pd

df = pd.DataFrame({
    "order_id": ["001", "002", None, "004"],
    "region": ["서울", None, "부산", "서울"],
    "amount": [10000, None, 5000, 0],
})
print(df.isna().sum().to_dict())

clean = df.dropna(subset=["order_id"]).copy()
clean["region"] = clean["region"].fillna("미입력")
assert len(clean) == 3
assert clean["amount"].isna().sum() == 1
assert (clean["amount"] == 0).sum() == 1
print(clean.to_string(index=False))

처음 집계는 각 열의 결측치가 1개씩임을 보여 줍니다. 최종 결과는 3행이며 금액의 미확인 1건과 실제 0원 1건이 구분되어 있습니다. 누락 금액을 0으로 채웠다면 미확인 주문까지 0원 주문으로 해석할 위험이 있습니다.

fillna와 dropna는 언제 사용하나요?

처리적합한 예확인할 점
dropna(subset=...)필수 키가 없어 사용할 수 없는 행 제외삭제 행 수와 원본 보존
fillna("미입력")범주형 열에 누락 범주 추가실제 값과 충돌하지 않는 라벨
평균·중앙값 대체분석 목적에 맞는 수치형 변수분포 변화와 집단별 편향
누락 유지금액 미확인 등 누락 자체가 정보후속 집계가 누락을 처리하는 방법

빈 문자열도 결측치인가요?

DataFrame에 이미 들어 있는 빈 문자열은 자동으로 모든 결측 표현과 같아지지 않습니다. 입력 파일의 공백과 별도 표기값을 먼저 확인하고, 필요한 열에 한해 replace()나 읽기 옵션으로 정규화하세요. 실제 범주 이름까지 누락으로 치환하지 않도록 주의합니다.

공식 자료: Pandas missing data 가이드. 관련 글: CSV 병합, JSON 구조 검증, 데이터 처리 가이드.

작성: 로그 · 2026-10-17 수정: 일률적인 삭제 비율과 성능 보장 문구를 제거하고 업무 규칙별 예제를 추가했습니다.

댓글

이 블로그의 인기 게시물

API 키 저장 방법: 해싱과 암호화의 차이, Fernet 예제

파이썬 Google Sheets API 연동: 서비스 계정 권한과 읽기·쓰기