[작성자:] speedpointer

  • 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()