03단계 · 1유형 — 전처리와 계산

결측치 처리 방법이 답을 바꾼다

같은 열을 평균·0·중앙값으로 채우고 버렸을 때 결과가 어떻게 갈리는지 직접 본다.

먼저 알아볼게요

코드로 이동 ↓

결측치 처리에는 정해진 정답이 없다. 발문이 시킨 방법이 정답이다. 그래서 어떤 방법이 값을 어떻게 움직이는지 감이 있어야 한다.

평균으로 채우면 평균은 변하지 않는다. 빠진 자리에 평균을 넣었으니 당연하다. 이 데이터에서는 퍼짐(표준편차)이 줄어든다.

0 으로 채우면 평균이 움직인다. 이 데이터처럼 값이 전부 양수면 내려간다(3.937 → 3.5433). 값이 음수이거나 평균이 0 근처인 열에서는 방향이 반대일 수도 있으니, "0 으로 채우면 내려간다" 를 규칙으로 외우지 않는다. 0 으로 대체할지는 발문과 데이터의 의미를 보고 정한다.

중앙값으로 채우면 평균이 중앙값 쪽으로 움직인다. 평균과 중앙값이 같은 열이라면 아무 변화도 없다. 극단값이 있는 열에서는 평균보다 중앙값이 안전한 선택으로 쓰인다.

행을 버리면 그 행의 다른 열 값도 같이 사라진다. 버린 뒤의 행 수를 반드시 확인한다.

이렇게 써요
import pandas as pd

df = pd.read_csv("emp.csv")
y = df["근속연수"]
print(round(y.mean(), 4), round(y.fillna(0).mean(), 4))
기억할 한 가지

평균으로 채우면 평균은 그대로다. 다른 방법의 영향은 데이터에 따라 다르므로, 발문이 지정한 방법을 쓴다.

이 단계의 수업
  1. 1사분위수와 IQR
  2. 2이상치 세고 빼고 다시 계산하기
  3. 3정규화 — MinMaxScaler
  4. 4표준화 — StandardScaler 와 ddof 차이
  5. 5결측치 처리 방법이 답을 바꾼다
  6. 61유형 한 문제 통째로 풀기
직접 해보기

emp.csv 의 고객만족도 에서 ① 원래 평균 ② 평균으로 채운 뒤 평균 ③ 0 으로 채운 뒤 평균 ④ 중앙값으로 채운 뒤 평균 ⑤ 결측 행을 버린 뒤 평균을 모두 소수 4자리로 출력하고, ⑥ 근속연수 를 중앙값으로 채운 뒤 평균(소수 4)을 출력하세요.

제공 파일 1개 · 내용 보기

파일은 준비되어 있어요. 코드에서 이름으로 불러오세요.

emp.csv
사번,이름,부서,직급,연봉,근속연수,고객만족도,입사일
1001,김서준,인사,사원,3230,2,3.8,2024-08-28
1002,이지우,인사,사원,4083,3,4.2,2023-07-26
1003,박도윤,인사,사원,3222,1,3.4,2025-09-24
1004,최하은,지원,부장,7395,18,4.6,2008-06-09
1005,정예준,영업,부장,8075,17,,2009-05-20
1006,강수아,인사,부장,7466,18,4.7,2008-06-01
1007,조민준,지원,대리,4558,5,4.7,2021-01-28
1008,윤지아,영업,과장,5796,,4.6,2015-04-13
1009,장시우,지원,과장,5878,13,4.6,2013-12-15
1010,임하윤,지원,대리,4686,9,3.3,2017-05-19
1011,한도현,지원,부장,7426,20,4.3,2006-07-27
1012,오채원,영업,사원,3545,4,,2022-06-25
1013,신건우,영업,사원,3724,1,3.8,2025-02-19
1014,권서연,영업,대리,4327,7,3.2,2019-05-06
1015,황준서,개발,부장,7732,21,4.7,2005-05-13
1016,안다은,영업,사원,3823,4,4.2,2022-01-13
1017,송지호,개발,부장,7262,19,4.4,2007-07-27
1018,전유진,지원,과장,6006,15,3.6,2011-03-16
1019,홍현우,개발,과장,5806,14,4.7,2012-10-17
1020,문소율,지원,사원,4008,,3.2,2023-01-06
1021,양지훈,개발,부장,7754,13,3.4,2013-07-10
1022,배가은,개발,과장,5483,13,3.4,2013-03-21
1023,백태윤,지원,사원,3510,4,4.1,2022-10-07
1024,유서윤,인사,사원,3477,2,,2024-06-22
1025,남주원,지원,사원,3581,1,3.3,2025-06-12
1026,노예린,영업,대리,4410,4,4.9,2022-06-04
1027,하시윤,지원,부장,7820,21,3.6,2005-04-15
1028,구다인,인사,사원,3846,1,3.2,2025-11-08
1029,서준혁,인사,대리,4549,4,3.2,2022-06-24
1030,민하율,개발,부장,7903,15,3.2,2011-12-03
내 코드 Python
Python 준비 중… 처음 한 번만 내려받아요

들여쓰기: Tab · 편집기에서 나가기: Esc 다음 Tab

실행 결과

실행하면 코드가 출력한 내용이 여기에 나타나요.

막혔을 때

풀이와 비교하기

내 코드와 한 줄씩 비교해 보세요. 풀이를 보는 것만으로 완료되지는 않아요.

import pandas as pd

df = pd.read_csv("emp.csv")
sat = df["고객만족도"]
print(round(sat.mean(), 4))
print(round(sat.fillna(sat.mean()).mean(), 4))
print(round(sat.fillna(0).mean(), 4))
print(round(sat.fillna(sat.median()).mean(), 4))
print(round(sat.dropna().mean(), 4))
print(round(df["근속연수"].fillna(df["근속연수"].median()).mean(), 4))