LLM 엔지니어링1장 · 머신러닝 프로세스와 기본 개념16 / 23← 이전목차다음 →MetaContents

1장. 머신러닝 프로세스와 기본 개념

실습 2 — 빈칸·실수·중복 고치고 저장하기

실습 1에서 찾은 흠을 차례로 고치고, 고친 표를 out_delivery_clean.csv 로 저장합니다. 실습 3부터는 이 파일을 읽습니다.

1단계. 두 번 들어간 행 지우기

Python
import pandas as pd

df = pd.read_csv("delivery.csv")
print("고치기 전:", df.shape)

# drop_duplicates() 는 같은 행 가운데 첫 행만 남기고 나머지를 지운 새 표를 돌려준다
df = df.drop_duplicates()
print("중복을 지운 뒤:", df.shape)
출력
고치기 전: (1215, 10)
중복을 지운 뒤: (1200, 10)

2단계. 입력 실수 행 빼기

Python
# 거리가 9999 보다 작은 행만 남긴다(조건으로 행 고르기)
# .copy() 는 고른 행을 새 표로 떼어 둔다. 없으면 뒤에서 열을 고칠 때 pandas 가 경고를 낸다
df = df[df["거리km"] < 9999].copy()
print("입력 실수를 뺀 뒤:", df.shape)
출력
입력 실수를 뺀 뒤: (1194, 10)

3단계. 빈칸 채우기

Python
# 무게: 가운데 값(중앙값)으로 채운다. 무거운 가전이 평균을 끌어올리므로 평균 대신 중앙값을 쓴다
middle = df["무게kg"].median()
df["무게kg"] = df["무게kg"].fillna(middle)

# 날씨: 글자라서 중앙값이 없다. '모름' 이라는 새 값으로 채워 빈칸이었다는 사실을 남긴다
df["날씨"] = df["날씨"].fillna("모름")

print("무게를 채운 값:", middle)
# 남은 빈칸이 0 이면 다 채운 것이다
print("남은 빈칸:", df.isna().sum().sum())
출력
무게를 채운 값: 3.0
남은 빈칸: 0

4단계. 저장하기

Python
# index=False: 왼쪽의 행 번호는 저장하지 않는다
# encoding="utf-8-sig": 엑셀에서 열어도 한글이 깨지지 않게 한다
df.to_csv("out_delivery_clean.csv", index=False, encoding="utf-8-sig")
print("저장:", df.shape)
출력
저장: (1194, 10)

이 실습이 뜻하는 것

이 실습은 훑어본 송장 더미를 실제로 정리하는 일과 같습니다. 두 번 꽂힌 송장을 빼고(1단계), 말이 안 되는 숫자가 적힌 송장을 빼고(2단계), 빈칸을 채운 뒤(3단계), 정리한 묶음을 새 서류철에 넣어 보관합니다(4단계). 여기서 빼는 일이 drop_duplicates 와 조건으로 행 고르기, 채우는 일이 fillna, 새 서류철이 out_delivery_clean.csv 입니다. 비유와 다른 점은, 실제 송장이라면 빈 무게를 다시 재겠지만 여기서는 가운데 값으로 짐작해 채운다는 것입니다.

단계출력뜻
1. 중복 지우기(1215, 10) → (1200, 10)행이 15개 줄었습니다. 실습 1에서 센 중복 15행이 빠진 것입니다
2. 입력 실수 빼기(1194, 10)다시 6행이 줄었습니다. 9999km 로 적힌 6행이 빠졌습니다
3. 빈칸 채우기무게를 채운 값 3.0빈 무게 칸을 남은 주문의 가운데 값인 3.0kg 으로 채웠습니다. 빈 날씨는 '모름' 으로 채웠습니다
3. 빈칸 확인남은 빈칸 0표 전체에 빈칸이 하나도 남지 않았습니다
4. 저장(1194, 10)1,194행, 10열짜리 정리된 표가 파일로 남았습니다

한 줄로 줄이면, 1,215행에서 흠 있는 21행(중복 15, 입력 실수 6)을 빼고 빈칸을 채워 1,194행의 깨끗한 표를 만든 실습입니다. 실습 3부터 실습 6이 이 파일을 읽습니다. 채운 3.0kg 과 '모름' 은 짐작해 넣은 값이지 실제로 잰 값이 아니라는 점은 기억해 둡니다.

코드 설명

  • 1단계에서 1,215행이 1,200행이 됩니다. 실습 1에서 센 중복 15행이 빠진 것입니다.
  • 2단계의 df[조건] 은 조건이 True 인 행만 남깁니다. 9999km 6행이 빠져 1,194행이 됩니다.
  • fillna(값) 은 빈칸만 그 값으로 바꾸고 나머지 칸은 그대로 둡니다.
  • 날씨를 지우지 않고 '모름' 으로 채운 까닭은 행을 버리지 않기 위해서입니다. 행을 지우면 그만큼 기록을 잃습니다.
  • 저장한 파일 이름이 out_ 으로 시작하는 것은 이 교안의 약속입니다. 실습이 만든 파일이라는 표시입니다.
← 이전 절1장 · 실습 1 — 배송 데이터 읽고 흠 찾기다음 절 →1장 · 실습 3 — 조건별 지연 비율을 그래프로 보기