출처 : 더에이아이랩 AICE Associate특강, Chat GPT
pandas에서 axis 의미
axis 값 | 방향 | 설명 |
axis=0 | 세로 방향 | 행 기준으로 연산, 즉 열(column) 단위 합계 |
axis=1 | 가로 방향 | 열 기준으로 연산, 즉 행(row) 단위 합계 |
결측치 처리
결측치
- 데이터가 빠져 있는 값
- 파이썬에서는 결측치를 ‘NaN’으로 표기
결측치 확인
- info() 메서드로 인덱스 범위(RangeIndex), 컬럼별 non-null 수 확인
- RangeIndex 정보의 entries 수와 컬럼 정보의 컬럼별 non-null 수를 비교해보면 결측치 존재 여부 확인 가능
결측치 수 확인
- isnull() : 값이 null이면 True, null이 아니면 False 반환
- isnull().sum(axis=0) : 데이터프레임 컬럼 기준으로 합하면 True의 합, 즉, 결측치 개수 반환
이름 | 나이 | 키 | |
0 | 철수 | 15 | 160 |
1 | 영희 | NaN | 155 |
2 | 민수 | 18 | NaN |
3 | NaN | NaN | NaN |
결측치 수 확인 예시 코드(axis=0)
import pandas as pd
import numpy as np
df = pd.DataFrame({
"이름": ["철수", "영희", "민수", None],
"나이": [15, None, 18, None],
"키": [160, 155, None, None]
})
print(df.isnull().sum(axis=0))
출력 결과
이름 1
나이 2
키 2
dtype: int64
각 컬럼별 결측치 수를 출력한다.
결측치 수 확인 예시 코드(axis=1)
import pandas as pd
import numpy as np
df = pd.DataFrame({
"이름": ["철수", "영희", "민수", None],
"나이": [15, None, 18, None],
"키": [160, 155, None, None]
})
print(df.isnull().sum(axis=1))
출력 결과
0 0
1 1
2 1
3 3
dtype: int64
각 행별 결측치 수를 출력한다.
결측치 처리
- dropna() : 행 기준으로 각 컬럼값에 결측값이 1개라도 있으면 해당 행 삭제
- how 파라미터를 ‘all’로 설정하면 모든 컬럼이 결측치인 행만 삭제됨
- drop([’컬럼명’]) : 지정한 컬럼 삭제
- fillna() : 파라미터에 지정하는 값으로 결측치를 대체
- df.fillna(0) : 0으로 채우기
- df.fillna(df.mean()) : 컬럼의 평균값으로 채우기
이상치 처리
IQR 계산하기
- quantile() : 데이터를 크기별로 줄 세운 후 해당하는 퍼센트에 따른 값으로 반환
- quantile(0.25) → 제1사분위수, quantile(0.75) → 제3사분위수
스케일링 (수치형 변수)
정규화 스케일링
from sklearn.preprocessing import MinMaxScaler
# 정의
scaler = MinMaxScaler()
# 기준 정하기(fit), 변환(fransform)
scaler.fit_transform(x_train) # x_train 기준으로 변환
scaler.transform(x_valid) # 앞에서 정해준 기준으로 변환만
표준화 스케일링
form sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(x_train)
scaler.transform(x_valid)
인코딩
레이블 인코딩
from sklern.preprocessing import LabelEncoder
LabelEncoder = LabelEncoder();
LabelEncoder .fit_transform(x_train)
LabelEncoder .transform(x_valid)
- 범주형 데이터를 정수로 변환하는 방식
- 순서가 없는 카테고리도 숫자로 바꾸지만, 숫자 간 순서 의미가 생기므로 주의 필요
- LabelEncoder.inverse_transform() : 디코딩도 가능
- LabelEncoder.fit_transform() : 학습 데이터에 맞춰 숫자 변환 + 학습
- LabelEncoder.transform() : 학습된 기준으로 검증/새로운 데이터 변환
- 순서가 없는 범주형 데이터에는 원-핫 인코딩이 더 안전
- 순서가 있는 데이터에는 레이블 인코딩이 효율적
- 아래 표에 레이블 인코딩 적용 → Red=2, Blue=0, Green=1 같은 식으로 정수 매핑됨
Color |
Red |
Blue |
Green |
레이블 인코딩 활용 예시(scikit-learn)
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 학습용/검증용 데이터
x_train = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})
x_valid = pd.DataFrame({'Color': ['Green', 'Blue']})
# 1. LabelEncoder 객체 생성
encoder = LabelEncoder()
# 2. 학습 데이터로 학습 및 변환
y_train_encoded = encoder.fit_transform(x_train['Color'])
# 3. 검증 데이터 변환
y_valid_encoded = encoder.transform(x_valid['Color'])
print("학습 데이터 인코딩 결과")
print(y_train_encoded)
print("\n검증 데이터 인코딩 결과")
print(y_valid_encoded)
# 4. 매핑 확인
print("\n카테고리와 숫자 매핑")
print(dict(zip(encoder.classes_, range(len(encoder.classes_)))))
출력 결과
학습 데이터 인코딩 결과
[2 0 1 2]
검증 데이터 인코딩 결과
[1 0]
카테고리와 숫자 매핑
{'Blue': 0, 'Green': 1, 'Red': 2}
원-핫 인코딩
pandas 활용 예시
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({
'Color': ['Red', 'Blue', 'Green', 'Red']
})
print("원본 데이터")
print(df)
# get_dummies 적용
df_encoded = pd.get_dummies(df, columns=['Color'])
print("\n원-핫 인코딩 결과")
print(df_encoded)
- 각 카테고리에 숫자를 하나씩 부여하는 방식
- get_dummies() : 바로 원-핫 인코딩 가능
출력 결과
원본 데이터
Color
0 Red
1 Blue
2 Green
3 Red
원-핫 인코딩 결과
Color_Blue Color_Green Color_Red
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
사이킷런(scikit-learn) 활용 예시
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
# 예제 데이터
df_train = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})
df_valid = pd.DataFrame({'Color': ['Green', 'Blue']})
# 1. OneHotEncoder 객체 생성
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
# sparse=False → 결과를 배열로 반환
# handle_unknown='ignore' → 학습에 없던 값이 나와도 에러 안남
# 2. 학습 데이터로 학습 및 변환
x_train_encoded = encoder.fit_transform(df_train[['Color']])
# 3. 검증 데이터로 변환
x_valid_encoded = encoder.transform(df_valid[['Color']])
print("학습 데이터 인코딩 결과")
print(x_train_encoded)
print("\n검증 데이터 인코딩 결과")
print(x_valid_encoded)
출력 결과
학습 데이터 인코딩 결과
[[0. 0. 1.]
[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
검증 데이터 인코딩 결과
[[0. 1. 0.]
[1. 0. 0.]]
'자격증 > AICE' 카테고리의 다른 글
AI 모델링 기초 (0) | 2025.09.01 |
---|---|
데이터 수집 및 분석 기초 (0) | 2025.08.26 |