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()
답글 남기기