Post

Pandas 데이터 분석: 결측치와 중복 데이터 처리

결측치 처리 방법과 중복 데이터 제거 방법

데이터 분석에서 결측치와 중복 데이터는 모델의 성능과 결과에 큰 영향을 미칠 수 있습니다. Pandas는 이러한 문제를 효율적으로 처리할 수 있는 다양한 도구를 제공합니다. 이번 글에서는 결측치 처리 방법중복 데이터 제거 방법을 살펴보겠습니다.

1. 결측치 처리

결측치(missing values)는 데이터셋에서 값이 비어 있는 경우를 의미하며, Pandas는 이를 NaN으로 나타냅니다.

1) 결측치 확인

isnull()notnull() 함수는 결측치를 확인하는 데 사용됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
import numpy as np

# 데이터프레임 생성
data = {"Name": ["Alice", "Bob", None, "David"],
        "Age": [25, None, 30, 40],
        "Job": ["Engineer", "Doctor", "Teacher", None]}
df = pd.DataFrame(data)

# 결측치 확인
print(df.isnull())
# 출력:
#    Name    Age    Job
# 0  False  False  False
# 1  False   True  False
# 2   True  False  False
# 3  False  False   True

결측치 개수 확인

1
2
3
4
5
6
# 각 열의 결측치 개수
print(df.isnull().sum())
# 출력:
# Name    1
# Age     1
# Job     1
2) 결측치 제거

dropna() 함수는 결측치가 있는 행 또는 열을 제거합니다.

1. 결측치가 있는 행 제거

1
2
3
4
5
df_dropped_rows = df.dropna()
print(df_dropped_rows)
# 출력:
#     Name   Age       Job
# 0  Alice  25.0  Engineer

2. 결측치가 있는 열 제거

1
2
3
4
5
6
7
8
df_dropped_cols = df.dropna(axis=1)
print(df_dropped_cols)
# 출력:
#     Name
# 0  Alice
# 1    Bob
# 2   None
# 3  David
3) 결측치 대체

fillna() 함수는 결측치를 특정 값으로 대체합니다.

1. 고정 값으로 대체

1
2
3
4
5
6
7
8
df_filled = df.fillna("Unknown")
print(df_filled)
# 출력:
#     Name    Age        Job
# 0  Alice   25.0   Engineer
# 1    Bob  Unknown   Doctor
# 2 Unknown   30.0   Teacher
# 3  David   40.0    Unknown

2. 평균값, 중간값, 최빈값으로 대체

1
2
3
4
5
6
7
8
9
# Age 열의 결측치를 평균값으로 대체
df["Age"] = df["Age"].fillna(df["Age"].mean())
print(df)
# 출력:
#     Name        Age        Job
# 0  Alice  25.000000   Engineer
# 1    Bob  31.666667   Doctor
# 2   None  30.000000   Teacher
# 3  David  40.000000       None

3. 특정 방법을 사용한 결측치 대체

1
2
3
4
5
# 바로 이전 값으로 대체
df_filled_forward = df.fillna(method="ffill")

# 바로 이후 값으로 대체
df_filled_backward = df.fillna(method="bfill")

2. 중복 데이터 처리

중복 데이터는 데이터셋에서 동일한 데이터가 여러 번 나타나는 경우를 의미하며, 분석 결과를 왜곡할 수 있습니다.

1) 중복 데이터 확인

duplicated() 함수는 중복 데이터를 확인합니다.

1
2
3
4
5
6
7
8
9
10
11
12
# 데이터프레임 생성
data = {"Name": ["Alice", "Bob", "Alice", "David"],
        "Age": [25, 30, 25, 40]}
df = pd.DataFrame(data)

# 중복 확인
print(df.duplicated())
# 출력:
# 0    False
# 1    False
# 2     True
# 3    False
2) 중복 데이터 제거

drop_duplicates() 함수는 중복된 데이터를 제거합니다.

1
2
3
4
5
6
7
8
# 중복된 행 제거
df_unique = df.drop_duplicates()
print(df_unique)
# 출력:
#     Name  Age
# 0  Alice   25
# 1    Bob   30
# 3  David   40

옵션 활용

  • subset: 특정 열을 기준으로 중복 제거.
  • keep: 첫 번째("first") 또는 마지막("last") 중복 데이터만 유지.
1
2
3
# Age 열을 기준으로 중복 제거
df_unique = df.drop_duplicates(subset="Age", keep="last")
print(df_unique)

3. 결측치와 중복 데이터 처리 팁

  1. 처리 방법 선택
    • 결측치나 중복 데이터를 제거할지, 대체할지는 데이터의 특성과 분석 목적에 따라 결정해야 합니다.
  2. 대체 값 선택
    • 평균, 중간값, 최빈값 등 대체 값은 데이터의 분포에 따라 적절히 선택하세요.
  3. 결과 저장
    • Pandas는 기본적으로 원본 데이터를 변경하지 않습니다. 처리 결과를 저장하려면 변수에 다시 할당하거나 inplace=True 옵션을 사용하세요.

정리

  • Pandas는 결측치 확인, 제거, 대체를 위한 다양한 도구를 제공합니다.
  • 중복 데이터는 duplicated()drop_duplicates()를 사용해 쉽게 처리할 수 있습니다.
  • 데이터 처리 방식은 분석 목적에 따라 유연하게 선택해야 합니다.

다음 글 예고:
Pandas의 고급 기능인 “그룹화(groupby)와 데이터 병합(merge)”을 다뤄보겠습니다!

This post is licensed under CC BY 4.0 by the author.