import pandas as pd
# 예제 DataFrame 생성
data = {'A': [1, 2, None, 4],
'B': [5, None, 7, 8],
'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
# 결측치가 있는 행 제거
df_cleaned_rows = df.dropna(axis=0)
# 결측치가 있는 열 제거
df_cleaned_cols = df.dropna(axis=1)
# 결측치가 있는 행 제거 결과 출력, 결과1
print("원본 데이터:\n", df)
print("\n결측치가 제거된 데이터:\n", df_cleaned_rows)
# 결측치가 있는 행 제거 결과 출력, 결과2
print("원본 데이터:\n", df)
print("\n결측치가 제거된 데이터:\n", df_cleaned_cols)
결측치는 데이터셋에서 값이 비어있거나 존재하지 않는 경우이며, Pandas에서는 NaN으로 표시됩니다.
결측치를 확인하고 다루는 몇 가지 방법을 설명하겠습니다.
결측치 갯수, 값 확인
[isna() 사용하기]
import pandas as pd
# 예제 데이터프레임 생성
data = {'A': [1, 2, None, 4],
'B': [None, 5, 6, 7],
'C': [8, 9, 10, 11]}
df = pd.DataFrame(data)
# 결측치 확인, 결과1
print(df.isna())
# 결측치 갯수 확인, 결과2
missing_count = df.isna().sum()
print(missing_count)
# 각 행에 대해 결측치가 있는 것들만 보기, 결과3
rows_with_missing_values = df[df.isna().any(axis=1)]
print("결측치가 있는 행:")
print(rows_with_missing_values)
[결과1]
A B C
0 False True False
1 False False False
2 True False False
3 False False False
[결과2]
A 1
B 1
C 0
dtype: int64
[결과3]
결측치가 있는 행:
A B C
0 1.0 NaN 8
2 NaN 6.0 10
결측치 처리 (제거)
.dropna()
import pandas as pd
# 예제 DataFrame 생성
data = {'A': [1, 2, None, 4],
'B': [5, None, 7, 8],
'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
# 결측치가 있는 행 제거
df_cleaned_rows = df.dropna(axis=0)
# 결측치가 있는 열 제거
df_cleaned_cols = df.dropna(axis=1)
# 결측치가 있는 행 제거 결과 출력, 결과1
print("원본 데이터:\n", df)
print("\n결측치가 제거된 데이터(행 제거):\n", df_cleaned_rows)
# 결측치가 있는 열 제거 결과 출력, 결과2
print("\n원본 데이터:\n", df)
print("\n결측치가 제거된 데이터(열 제거):\n", df_cleaned_cols)
결과1
원본 데이터:
A B C
0 1.0 5.0 9
1 2.0 NaN 10
2 NaN 7.0 11
3 4.0 8.0 12
결측치가 제거된 데이터(행 제거):
A B C
0 1.0 5.0 9
3 4.0 8.0 12
결과2
원본 데이터:
A B C
0 1.0 5.0 9
1 2.0 NaN 10
2 NaN 7.0 11
3 4.0 8.0 12
결측치가 제거된 데이터(열 제거):
C
0 9
1 10
2 11
3 12
결측치 처리 (대체)
1. 평균 또는 중앙값 대체:
수치형 변수의 결측치를 대체할 때 사용됩니다.
해당 열의 평균 또는 중앙값을 계산하여 결측치를 대체합니다.
# 평균으로 결측치 대체
df_filled_mean = df.fillna(df.mean())
2. 최빈값 대체:
범주형 변수의 결측치를 대체할 때 사용됩니다.
해당 열의 최빈값(가장 자주 등장하는 값)을 결측치에 대체합니다.
# 최빈값으로 결측치 대체
df_filled_mode = df.fillna(df.mode().iloc[0])
3. 사전에 정의된 값 사용:
결측치를 특정한 값으로 대체할 때 사용됩니다.
예를 들어, 0 또는 "Unknown"과 같은 사전에 정의된 값으로 결측치를 대체합니다.
# 특정 값으로 결측치 대체
df_filled_custom = df.fillna(0) # 또는 df.fillna("Unknown")
4. 보간 (Interpolation):
시계열 데이터에서 사용되며, 결측치를 주변 데이터의 값에 기반하여 근사적으로 대체합니다.
# 보간을 사용하여 결측치 대체
df_interpolated = df.interpolate(method='linear')
*.interpolate()의 method 파라미터 설명
linear (default):
주어진 두 데이터 포인트 사이의 값들을 선형적으로 보간합니다.(인덱스 순서대로)
time:
시간에 대해 선형적으로 보간하면서 datetime 인덱스가 있는 데이터 프레임에서만 사용됩니다.
index:
인덱스의 값을 기반으로 선형 보간합니다.
values:
인덱스 값이 아닌 데이터 자체를 기준으로 선형 보간합니다.
polynomial:
주어진 데이터 포인트 사이를 다항식으로 보간합니다. order 매개변수를 사용하여 다항식의 차수를 지정할 수 있습니다.
spline:
데이터를 근사하는 스플라인 곡선을 사용하여 보간합니다.
barycentric:
데이터를 바리센트릭 가중치를 사용하여 보간합니다.
krogh:
불균일한 간격의 시계열 데이터에서 사용됩니다.
nearest:
가장 가까운 이웃의 값을 사용하여 보간합니다.
5. 머신러닝 모델을 사용한 대체:
머신러닝 모델을 사용하여 결측치를 예측하고 대체하는 방법도 있습니다.
회귀 모델, KNN 등의 모델을 활용할 수 있습니다.
'AI > 데이터 전처리' 카테고리의 다른 글
[데이터 분석] Pandas Cheeting Sheet : 데이터(DataFrame) 전처리 (0) | 2024.04.19 |
---|---|
5. 데이터 전처리의 모든 것 : DataFrame 파일 입출력 (1) | 2024.04.18 |
1. CRISP으로 둘러보는 데이터 분석 (0) | 2024.04.17 |