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) 리뷰로 작성 되었습니다.
'학습일지' 카테고리의 다른 글
| [스나이퍼팩토리] 한컴AI아카데미(26.06.23) 머신러닝, (의사결정나무알고리즘) (0) | 2026.06.23 |
|---|---|
| [스나이퍼팩토리] 한컴AI아카데미(26.06.22) Pandas 그룹화/형변환 (0) | 2026.06.22 |
| [스나이퍼팩토리] 한컴AI아카데미(26.06.17) Pandas (0) | 2026.06.17 |
| [스나이퍼팩토리] 한컴AI아카데미(26.06.11) JWT 기반 인증 (0) | 2026.06.11 |
| [스나이퍼팩토리] 한컴AI아카데미(26.06.10) Fast API (1) | 2026.06.10 |