학습일지

[스나이퍼팩토리] 한컴AI아카데미(26.06.19) Pandas 데이터 전처리 정리

cd-record 2026. 6. 19. 18:00

 

Pandas 데이터 전처리 핵심 정리

import pandas as pd

data = [
    ['김민재', 31, 75, 5428000],
    ['이강인', 22, 57, None],
    ['박찬호', 50, None, 8428000],
    ['차범근', 70, 80, 4428000],
    ['추신수', 43, 100, 4528000],
    ['손흥민', 31, 72, 7028000],
    ['황희찬', 28, 69, 2528000]
]

df = pd.DataFrame(data, columns=['성명', '나이', '몸무게', '급여'])

1. sample() : 랜덤 추출

행 n개 랜덤 추출

df.sample(3)

비율로 랜덤 추출

train = df.sample(frac=0.7)
# 랜덤 (1을 기준 백분율, 0.7~70%)

데이터프레임이나 시리즈에서 전체 데이터 대비 지정된 비율(%)만큼의 데이터를 무작위로 추출할 때 사용

  • frac=0.7 → 전체 데이터의 70% 추출

랜덤 결과 고정

train = df.sample(frac=0.7, random_state=42)
# 코드를 실행할 때마다 추출되는 데이터가 매번 달라집니다. 이를 방지하고 항상 같은 데이터가 추출되도록 하려면 생성 변수(random_state)를 지정하는 것이 좋습니다.
# random_state(생성 변수)는 무작위(랜덤) 결과를 항상 동일하게 고정해 주는 역할을 합니다.
# 컴퓨터의 랜덤은 사실 완전히 무작위가 아니라 특정 '시작 숫자(Seed)'를 바탕으로 계산된 규칙적인 난수입니다.
# 이 시작 숫자를 고정하는 매개변수가 바로 random_state입니다.

random_state는 무작위(Random) 추출 결과를 언제 실행해도 똑같이 나오도록 고정하는 역할

  • random_state : 랜덤 시드(seed) 고정
  • 항상 동일한 결과 추출
 

2. sort_values() : 정렬

오름차순

df.sort_values(by='나이')
# by는 생략 가능!!

내림차순

df.sort_values('나이', ascending=False)
# ascending: 오름차순, 내림차순(안 썼을 시 기본 오름차순)

다중 정렬

df.sort_values(
    ['나이', '몸무게'],
    ascending=True
)
 
  • 나이 기준 정렬
  • 나이가 같으면 몸무게 기준 정렬

3. 결측치 확인(.isna())

결측치 여부 확인

df.isna()

결측치 개수 확인

df.isna().sum()

 

특정 컬럼(열)에서 결측치 행 찾기

df[df['몸무게'].isna()]

 

결측치가 하나라도 있는 행

df[df.isna().any(axis=1)]

 

특정 컬럼(열)에서 결측치가 없는 행

df[df['몸무게'].notna()]
 

4. drop() : 행/열 삭제

행 삭제

df.drop(0)
 
df.drop([1, 3, 5]) # axis = 0 (기본값)
 

열 삭제

df.drop('몸무게', axis=1)
 

또는

df.drop(columns=['몸무게','급여']) # 복수 선택 가능

인덱스 위치로 삭제

df.drop(index=[1,3,5])
 

5. dropna() : 결측치 제거

결측치가 하나라도 있는 행 제거

df.dropna()

결측치가 하나라도 있는 열 제거

df.dropna(axis=1)

how='any'

df.dropna(how='any') # 기본값: axis=0, how='any'

모든 값이 결측치인 경우만 제거

df.dropna(how='all')

df.dropna(how='all', axis=1) # 열 기준

 

thresh

df.dropna(thresh=4)
# 유효한 데이터가 4개 이상인 행만 유지

df.dropna(axis=1, thresh=6)
# 유효한 데이터가 6개 이상인 열만 유지
 

 


6. fillna() : 결측치 채우기

특정 값으로 채우기

df.fillna(0)
# fillna: 결측지를 해당 값으로 수정(자료형: float)

# np.nan: null 값(넘파이 선언 시 사용 가능), 이상치 강은 값을 처리할 경우 np.nan(단, numpy 선언 시 사용 가능)

평균값으로 채우기(mean)

df['몸무게'].fillna(
    df['몸무게'].mean()
)

중앙값(Median)

df['몸무게'].fillna(
    df['몸무게'].median()
)

최빈값(mode)

df['몸무게'].fillna(
    df['몸무게'].mode()[0]
)
※ mode()는 Series를 반환하므로 [0] 사용

여러 컬럼 한 번에 채우기

replace_values = {
    '몸무게': df['몸무게'].mean(),
    '급여': df['급여'].median()
}

df.fillna(value=replace_values)
 

7. 이상치(Outlier)처리

import pandas as pd
import numpy as np

data = {
    '이름': ['김철수', '이영희', '박민수', '최수진', '홍길동'],
    '나이': [25, 30, 28, 22, 190]  
}
df = pd.DataFrame(data)

요약 통계량(평균, 최소값, 최대값, 사분위수 등)을 한눈에 확인

df.describe()

150세 초과를 이상치로 처리

df.loc[df['나이'] > 150, '나이'] = np.nan

결측치 대체

df['나이'] = df['나이'].fillna(190)
 

IQR 방식

1단계 : 사분위수 계산

# IQR 및 정상 범위 계산(quantile(분위수): 크기 순서대로 정렬된 데이터를 특정 비율로 나누는 기준값)
Q1 = df['나이'].quantile(0.25)
Q3 = df['나이'].quantile(0.75)

IQR = Q3 - Q1

2단계 : 정상 범위 계산

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

3단계 : 이상치 찾기

outlier_condition = (
    (df['나이'] < lower_bound) |
    (df['나이'] > upper_bound)
)

4단계 : NaN 처리

df.loc[outlier_condition, '나이'] = np.nan
 

8. value_counts() : 빈도수 계산

#판다스(Pandas)의 value_counts()는 시리즈(Series)나 데이터프레임(DataFrame)의 각 값들이 몇 번씩 등장하는지(빈도수)를 세어주는 핵심 함수
import pandas as pd
import numpy as np

data = {
    '품목': ['사과', '바나나', '사과', '오렌지', '바나나', '사과', np.nan],
    '수량': [3, 2, 5, 1, 2, 3, 4]
}
df = pd.DataFrame(data)
print(df)
df['품목'].value_counts()
 

결과

사과      3
바나나    2
오렌지    1
 

결측치 포함

df['품목'].value_counts(dropna=False)

비율 확인( 0~1 사이의 비율로 반환)

df['품목'].value_counts(normalize=True)
 

결과

사과      0.50
바나나    0.33
오렌지    0.17

오름차순 정렬

df['품목'].value_counts(
    ascending=True
)

구간별 빈도수

df['수량'].value_counts(bins=3)
 

예시

(0.99, 2.33]    3
(2.33, 3.66]    2
(3.66, 5.0]     2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
느낀점
 
 
이번주는 데이터 전처리 과정에 대해 numpy, matplotlib, pandas의 메소드에 대해 배웠다. 배워야하는 내용들은 되게 많겠지만 시간이 별로 없기 때문에 메소드 위주로 수업을 진행했는데 AI를 들어가기 전 데이터 전처리는 중요하기 때문에 제대로 배워야겠다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

——————————————————————————

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.