728x90
반응형
🧠 데이터 전처리 핵심 요약
(결측치 처리 + 통계 함수 + 정규표현식)
🩺 1️⃣ 결측치 처리 함수
결측치(Null, NaN)는 비어 있거나 누락된 데이터를 의미합니다. 이 데이터를 적절히 처리하지 않으면 통계나 모델 학습 결과가 왜곡됩니다.
✅ isnull()
결측치 여부(True/False)를 확인하는 함수
import pandas as pd
df = pd.DataFrame({
'이름': ['홍길동', '이몽룡', '성춘향', None],
'나이': [23, None, 19, 22]
})
print(df.isnull())
| 이름 | 나이 |
|---|---|
| False | False |
| False | True |
| False | False |
| True | False |
✅ dropna()
결측치가 포함된 행(row)이나 열(column)을 삭제
df_drop = df.dropna()
print(df_drop)
| 이름 | 나이 |
|---|---|
| 홍길동 | 23.0 |
| 성춘향 | 19.0 |
🔸 기본값은
axis=0(행 삭제) 🔸axis=1로 설정하면 열(column)을 삭제 🔸how='any'→ 결측치 1개라도 있으면 삭제 🔸how='all'→ 모든 값이 NaN일 때만 삭제
💡 참고: 결측치 채우기
df['나이'].fillna(df['나이'].mean(), inplace=True)
➡ 평균값으로 결측치를 대체
📊 2️⃣ 간단한 통계 함수
Pandas에서 자주 사용하는 기본 분석 함수입니다. 데이터프레임의 형태, 요약통계, 값 분포 등을 한눈에 확인할 수 있습니다.
✅ info()
데이터의 구조, 컬럼별 데이터 타입, 결측치 개수 확인
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 3 non-null object
1 나이 3 non-null float64
✅ describe()
숫자형 데이터의 요약 통계량 출력 (평균, 표준편차, 최소/최대, 사분위수)
df.describe()
| count | mean | std | min | 25% | 50% | 75% | max |
|---|---|---|---|---|---|---|---|
✅ value_counts()
시리즈(단일 컬럼)의 각 값별 등장 횟수 확인
df['이름'].value_counts()
홍길동 1
이몽룡 1
성춘향 1
옵션:
normalize=True→ 비율로 표시sort=False→ 원래 순서대로 표시
✅ unique()
컬럼에 포함된 고유값(중복 제거된 값) 리스트 출력
df['이름'].unique()
# array(['홍길동', '이몽룡', '성춘향', None], dtype=object)
🔤 3️⃣ 정규표현식(Regular Expression, RegEx)
정규표현식은 특정 패턴의 문자열을 검색하거나 정제하는 규칙 언어입니다. 텍스트 전처리, 데이터 정제, 토큰화 등에서 자주 사용됩니다.
✅ 기본 문법 요약
| 패턴 | 의미 | 예시 |
|---|---|---|
. |
임의의 한 문자 | a.b → “acb”, “a_b” |
\d |
숫자 (0~9) | \d{3} → 숫자 3자리 |
\w |
문자+숫자 | \w+ → 단어 |
\s |
공백 문자 | \s+ → 공백 1개 이상 |
^ |
문자열 시작 | ^abc → “abc123” |
$ |
문자열 끝 | xyz$ → “123xyz” |
[] |
문자 집합 | [A-Za-z] → 영문자 |
{n,m} |
반복 횟수 | \d{2,4} → 2~4자리 숫자 |
+ |
1회 이상 반복 | ㅋ+ → “ㅋㅋㅋ” |
? |
0~1회 | ab?c → “ac”, “abc” |
| ` | ` | OR 조건 |
✅ Python에서 사용하기
import re
# 패턴 정의
p = re.compile("010-?[0-9]{4}-?\\d{4}")
# 문자열 탐색
p.search("전화번호: 010-1234-5678") # 매칭됨
p.search("전화번호: 01012345678") # 매칭됨
p.search("전화번호: 010-12-5678") # 매칭 안 됨
✅ 문자열 치환 (replace)
text = "오늘은 ㅋㅋㅋㅋ 너무 즐거운 날이야ㅎㅎㅎ"
clean_text = re.sub("[ㅋㅎ]+", "", text)
print(clean_text)
# 오늘은 너무 즐거운 날이야
📘 전체 요약표
| 구분 | 함수/기법 | 주요 기능 | 예시 |
|---|---|---|---|
| 결측치 처리 | isnull() |
결측 여부 확인 | df.isnull() |
dropna() |
결측값 포함 행/열 제거 | df.dropna() |
|
| 기초 통계 | info() |
데이터 구조 요약 | df.info() |
describe() |
기본 통계량 계산 | df.describe() |
|
value_counts() |
빈도 수 집계 | df['col'].value_counts() |
|
unique() |
고유값 리스트 출력 | df['col'].unique() |
|
| 정규표현식 | re.compile() |
패턴 정의 | p = re.compile(...) |
re.search() |
패턴 검색 | p.search(text) |
|
re.sub() |
패턴 치환 | re.sub(pattern, '', text) |
✨ 한 줄 요약
isnull()·dropna()는 결측치 처리,info()·describe()등은 데이터 요약,re(정규표현식)은 텍스트 정제의 강력한 도구다.
728x90
반응형
'학습 > AI' 카테고리의 다른 글
| 언어지능(PLM) — 세상에서 가장 똑똑한 언어 비서가 만들어지는 과정 (0) | 2025.11.18 |
|---|---|
| 한국어 텍스트 감성분류 (0) | 2025.11.17 |
| 텍스트마이닝 - 한글 텍스트 전처리 (0) | 2025.11.16 |
| 한글 텍스트 전처리와 감성분류 (0) | 2025.11.15 |
| RNN 핵심 정리 (0) | 2025.11.14 |