[초급] 판다스 NaN 이놈 때문에 밤새는 일 오늘로 끝낸다

[초급] 판다스 NaN 이놈 때문에 밤새는 일 오늘로 끝낸다

결론부터 말한다. 데이터에 구멍(NaN)이 있으면 당신의 자동화 시스템은 무조건 멈춘다.

엑셀 파일이든, 데이터베이스든 데이터를 끌어와서 뭔가를 하려고 할 때 가장 먼저 발목을 잡는 놈. 바로 ‘NaN’이다. ‘Not a Number’의 약자. 그냥 빈칸이라고 생각하면 큰 오산이다.

빈 컵은 물이 0ml인 거지, 컵이 없는 게 아니다. NaN은 컵 자체가 없는 상태다. 시스템 입장에선 계산 자체가 불가능한 블랙홀 같은 존재임.

직장인 열에 아홉은 여기서 막힌다. 코드 에러 메시지에 ‘NaN’ 어쩌고 뜨면 일단 머리가 하얘진다. 나도 그랬다. 이 문제를 해결하는 방법은 딱 두 가지다. 구멍 난 데이터를 버리거나, 때우거나.

🗑️ 첫 번째 전략: 버린다 (dropna)

가장 단순하고 과격한 방법. NaN 값이 하나라도 포함된 행(row)이나 열(column)을 통째로 날려버리는 거다. 속 시원하다.

하지만 치명적인 단점이 있다. 중요한 정보까지 같이 날아갈 수 있다는 점. 예를 들어 1000개 데이터 중 딱 하나의 값만 비어있는데, 그 행 전체를 삭제하면 나머지 멀쩡한 9개 데이터도 같이 증발하는 셈. 신중하게 써야 한다.

🩹 두 번째 전략: 때운다 (fillna)

구멍 난 곳을 특정 값으로 땜질하는 방식. 이게 훨씬 더 많이 쓰인다. 뭘로 때울지는 상황에 따라 다르다.

  • 0으로 채우기: df.fillna(0) 가장 만만하다. 하지만 판매량 데이터인데 0으로 채우면 ‘못 팔았다’는 의미가 되므로 데이터 왜곡이 생길 수 있음.
  • 평균값/중앙값으로 채우기: df['나이'].fillna(df['나이'].mean()) 숫자 데이터에 쓰기 좋다. 전체 데이터의 통계적 특성을 크게 해치지 않는다.
  • 앞/뒤 값으로 채우기: df.fillna(method='ffill') 시계열 데이터(주가, 기온 등)에 유용함. 바로 앞 시간의 데이터로 현재의 빈 값을 채운다.

💀 초보자가 100% 저지르는 실수 TOP 3

이론은 쉽다. 근데 막상 해보면 꼭 여기서 터진다. 미리 기억하면 밤샘 한번은 막을 수 있다.

1. 원본 데이터가 안 바뀌는 마술

문제 상황: df.dropna() 코드를 분명히 실행했는데, 다시 df를 확인해보니 NaN이 그대로 있다.
원인: 판다스 명령어는 대부분 ‘복사본’을 만들어 결과를 보여준다. 원본 자체를 바꾸려면 특정 옵션을 줘야 함.
해결책: df = df.dropna() 처럼 다시 자기 자신에게 덮어쓰거나, df.dropna(inplace=True) 옵션을 붙여야 원본이 수정된다. 이거 몰라서 30분 날리는 사람 많다.

2. 숫자 데이터에 글자 집어넣기

문제 상황: 나이(숫자) 컬럼의 빈칸을 채우려고 df['나이'].fillna('알 수 없음') 코드를 썼다. 당장은 문제가 없는데, 나중에 평균 나이를 계산하려니 에러가 터진다.
원인: 숫자만 있던 데이터에 문자열이 섞이면서 해당 컬럼 전체가 ‘문자형’으로 바뀌어 버렸다. 컴퓨터는 글자랑 숫자를 더할 수 없다.
해결책: 데이터를 채우기 전에 반드시 데이터 타입(dtype)을 확인하는 습관을 들여야 한다. 숫자 컬럼엔 숫자를, 문자 컬럼엔 문자를 넣는 것이 기본 원칙이다.

3. 무지성 삭제로 데이터 반 토막 내기

문제 상황: 데이터에 NaN이 좀 있길래 간단하게 df.dropna()를 실행했다. 그랬더니 1만 개였던 데이터가 3천 개로 줄었다.
원인: 데이터에 구멍이 얼마나, 어떻게 분포되어 있는지 확인도 안 하고 일단 삭제부터 한 탓이다. 특정 컬럼에만 유독 NaN이 많았을 수 있음.
해결책: 코드를 실행하기 전에 df.isnull().sum() 명령어로 어느 컬럼에 결측치가 몇 개나 있는지 반드시 확인해야 한다. 상황을 파악하고, 특정 열만 삭제하든, 값을 채워 넣든 전략을 짜야 한다. 무작정 지우는 건 하수나 하는 짓이다.


데이터 전처리의 8할은 누라된 데이터 처리다. dropnafillna 이 두 가지만 머리에 넣으면, 최소한 데이터 때문에 자동화 시스템이 새벽에 멈추는 일은 없다. 버릴지 때울지, 그것만 잘 결정하면 된다.


PipeMaster-Lab 운영정책 및 제보 안내

① 공개된 모든 기록은 특정 기업이나 개인의 청탁 또는 금전적 지원 없이, 시스템 아키텍트의 독립적인 연구 및 실험 결과를 바탕으로 작성됩니다.
② 인용된 외부 콘텐츠 해석에 이의가 있는 경우,
연구실 직통 메일 pipemaster.lab@gmail.com
으로 연락 주시면 24시간 내 회신 및 즉각 조치합니다.
③ 게시된 내용 중 버전 변경으로 인한 정보 불일치나 치명적인 로직 오류를 제보해 주시는 분께는 내부 검토 후 소정의 기프티콘 등 바운티를 지급합니다.
④ 기업 단위의 시스템 아키텍처 컨설팅, 비즈니스 제휴 및 고도화 제안 역시 해당 공식 메일로만 수신 및 회신합니다.
verified

PIPEMASTER RESEARCH LAB

20년 IT 내공과 AI가 결합된 실전 무인 수익 자동화 시스템 연구소
본 콘텐츠는 PipeMaster-Lab 내부 Certified 규격을 엄격히 통과하였음을 증명합니다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다