Data quality issues related functions.

Python(Pandas & NumPy) 기반의 데이터 정제 작업에서 자주 사용하는 항목별 함수 및 예시 코드입니다.


🧹 1. 결측치(Missing Values)

➤ 탐색

df.isnull().sum()              # 컬럼별 결측치 개수
df[df['컬럼명'].isnull()]      # 특정 컬럼의 결측치 행

➤ 처리

df.dropna()                    # 결측치가 있는 행 제거
df.fillna(0)                   # 결측치를 0으로 대체
df['컬럼명'].fillna(df['컬럼명'].mean(), inplace=True)  # 평균으로 대체

🚨 2. 이상치(Outliers)

➤ 탐색 (IQR 기준)

Q1 = df['컬럼명'].quantile(0.25)
Q3 = df['컬럼명'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['컬럼명'] < Q1 - 1.5 * IQR) | (df['컬럼명'] > Q3 + 1.5 * IQR)]

➤ 처리

# 이상치 제거
df = df[~((df['컬럼명'] < Q1 - 1.5 * IQR) | (df['컬럼명'] > Q3 + 1.5 * IQR))]

📛 3. 오류(Invalid / Typo / 포맷 문제)

➤ 예: 음수, 잘못된 형식, 문자열 오류

# 음수 가격 오류 탐색
df[df['price'] < 0]

# 문자열 숫자 오류 (예: 'one', 'two')
df[~df['age'].apply(lambda x: str(x).isdigit())]

➤ 처리

# 음수 값을 0으로 대체
df.loc[df['price'] < 0, 'price'] = 0

# 문자열 숫자를 수치형으로 변환
df['age'] = pd.to_numeric(df['age'], errors='coerce')  # 오류시 NaN으로

🔁 4. 중복(Duplicates)

➤ 탐색

df.duplicated().sum()               # 완전 중복된 행 개수
df[df.duplicated()]                # 중복 행 확인
df.duplicated(subset=['name'])     # 특정 컬럼 기준 중복 여부

➤ 처리

df = df.drop_duplicates()         # 전체 중복 제거
df = df.drop_duplicates(subset=['name'], keep='first')  # 특정 컬럼 중복 제거

✅ 전체 정제 워크플로 예시

# 결측치 처리
df.fillna(method='ffill', inplace=True)

# 이상치 제거 (예시: price 기준)
Q1, Q3 = df['price'].quantile([0.25, 0.75])
IQR = Q3 - Q1
df = df[(df['price'] >= Q1 - 1.5 * IQR) & (df['price'] <= Q3 + 1.5 * IQR)]

# 오류 처리 (음수 가격 제거)
df = df[df['price'] >= 0]

# 중복 제거
df = df.drop_duplicates()

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다