더러운 데이터 청소기: 결측치(빈칸)와 중복 데이터 안전하게 제거하는 기준
데이터 분석이나 자동화 보고서를 만들 때 가장 고통스러운 순간은 언제일까요? 코드가 틀렸을 때가 아니라, 내가 믿었던 데이터가 '엉망'일 때입니다. 중간중간 비어있는 칸(결측치), 나도 모르게 두 번 세 번 들어간 중복 데이터들은 결국 잘못된 합계와 평균을 만들어내고, 이는 고스란히 보고서의 오류로 이어집니다. 엑셀에서 일일이 '찾기 및 바꾸기'를 하거나 눈으로 중복을 찾아 지우는 것은 시간도 오래 걸릴뿐더러 실수의 위험도 큽니다.
파이썬 판다스(Pandas)는 이런 '더러운 데이터'를 청소하는 데 최적화된 강력한 도구들을 갖추고 있습니다. 오늘은 실무에서 가장 자주 마주치는 빈칸(NaN)과 중복 데이터를 어떤 기준으로, 얼마나 안전하게 제거해야 하는지 그 실전 테크닉을 공유하겠습니다.
1. 결측치(NaN) 처리: 무조건 지우는 게 정답일까?
데이터를 불러왔을 때 보이는 NaN은 '값이 없음'을 의미합니다. 엑셀의 빈 셀과 같죠. 이를 처리하는 방법은 크게 두 가지입니다. 아예 삭제하거나, 적절한 값으로 채워 넣는 것입니다.
먼저, 데이터가 너무 많이 비어있어서 가치가 없다고 판단되면 df.dropna()를 사용합니다. 이 코드 한 줄이면 빈칸이 포함된 모든 행을 통째로 삭제해 줍니다. 하지만 조심해야 합니다. 중요한 매출 데이터가 딱 한 칸 비어있다고 해서 그 행 전체를 지워버리면 전체 실적이 왜곡될 수 있기 때문입니다.
이때 대안으로 사용하는 것이 df.fillna()입니다. 빈칸을 0으로 채우거나, "미입력" 같은 텍스트로 채워 넣는 방식입니다. 실무에서는 보통 매출 데이터의 빈칸은 0으로 채우고, 고객 명단의 빈칸은 "무명" 등으로 채워 데이터의 '전체 행 수'를 유지하는 전략을 자주 사용합니다.
2. 중복 데이터 제거: 중복의 기준을 명확히 세우기
여러 개의 엑셀 파일을 하나로 합치다 보면(5편 내용), 동일한 데이터가 중복해서 들어가는 경우가 허다합니다. 특히 복사 붙여넣기를 반복했던 수동 취합 파일을 받았다면 더더욱 그렇습니다. 판다스에서는 df.drop_duplicates() 함수 하나로 이 문제를 해결합니다.
하지만 무턱대고 실행하기 전에 고민해야 할 것이 있습니다. "무엇을 기준으로 중복이라고 할 것인가?"입니다. 예를 들어, 이름만 같다고 지우면 동명이인이 삭제될 수 있습니다. 이때는 subset 옵션을 활용해 df.drop_duplicates(subset=['이름', '전화번호']) 처럼 이름과 전화번호가 동시에 일치하는 경우만 지우도록 정교하게 설정해야 합니다. 또한, 중복된 것 중 가장 먼저 나온 데이터를 남길지(keep='first'), 가장 마지막 데이터를 남길지(keep='last') 결정하는 것도 실무자의 중요한 판단 기준입니다.
3. 데이터 청소 전후의 '체크리스트'
데이터를 청소할 때 가장 중요한 것은 "얼마나 지워졌는가"를 확인하는 것입니다. 작업을 시작하기 전 df.shape 명령어로 현재 전체 행 수가 몇 개인지 확인하고, 청소를 마친 후 다시 한번 행 수를 비교해 보세요.
만약 10만 건의 데이터 중 5만 건이 사라졌다면, 내 청소 기준(조건)이 너무 엄격했거나 원본 데이터에 심각한 문제가 있다는 신호입니다. 파이썬은 엑셀보다 작업 속도가 훨씬 빠르기 때문에, 자칫 잘못하면 눈 깜짝할 새 중요한 데이터까지 모두 날려버릴 수 있습니다. 항상 청소 전후의 데이터 개수를 확인하는 습관이 여러분을 '실수 없는 전문가'로 만들어줄 것입니다.
데이터의 품질이 보고서의 가치를 결정합니다
아무리 화려한 파이썬 코드를 짜더라도, 원본 데이터가 지저분하면 결과물은 쓰레기(Garbage In, Garbage Out)가 됩니다. 오늘 배운 결측치 처리와 중복 제거 기술은 단순한 코딩을 넘어, 데이터의 '무결성'을 지키는 가장 기본적이고 중요한 단계입니다. 깔끔하게 세차 된 데이터로 더 정확하고 신뢰받는 보고서를 만들어보시기 바랍니다.
▶ 핵심 요약
데이터의 빈칸(NaN)은
dropna()로 삭제하거나fillna()로 적절한 값(0, 평균 등)을 채워 넣어 데이터 왜곡을 방지해야 한다.중복 데이터는
drop_duplicates()로 제거하며, 이때subset옵션을 통해 중복으로 간주할 기준 열을 정확히 지정하는 것이 중요하다.전처리 전후의 데이터 행 수를 반드시 비교하여 의도치 않게 너무 많은 데이터가 유실되지 않았는지 확인하는 습관을 들여야 한다.
데이터를 깨끗하게 닦았으니, 이제 더 효율적으로 관리할 차례입니다. 다음 8편에서는 '날짜와 시간 데이터 포맷이 제각각일 때 파이썬으로 일괄 통일하는 비법'에 대해 다루며 시계열 데이터 관리의 기초를 배워보겠습니다.
여러분은 엑셀 데이터를 다룰 때 '빈칸' 때문에 수식이 깨지거나, '중복' 때문에 합계가 틀려서 곤혹스러웠던 적이 있으신가요? 나만의 데이터 검수 팁이 있다면 공유해 주세요!
댓글
댓글 쓰기