728x90
[Pandas] 결측값 처리
얼마전 데이터프레임을 다루면서, 결측치(`NaN`)가 있으면 같은 행의 데이터로 덮어씌우는 방식으로 결측치를 처리한 적이 있었다. Pandas에는 이러한 결측값을 효과적으로 처리할 수 있는 다양한 방법이 있어, 해당 방법을 정리해보고자 한다.
결측값 확인하기
데이터 프레임에서 결측값을 확인하는 것은 결측값 처리를 시작하는 첫 단계이다.
결측값을 확인 하기 위해 다음과 같은 메서드를 사용할 수 있다.
import pandas as pd
data = {'A': [1, 2, None], 'B': [None, 3, 4]}
df = pd.DataFrame(data)
## isnull()
# isnull() 메서드는 각 요소가 결측값인지 여부를 Boolean 값으로 반환한다.
df.isnull()
## isna()
# isna() 메서드는 isna()와 동일한 기능을 수행한다.
df.isna()
## info()
# info() 메서드는 데이터프레임의 각 열에 대한 결측값의 개수를 확인할 수 있다.
df.info()
결측값 제거하기
결측측 값을 제거하기 위해선 `dropna()`를 사용할 수 있다.
## dropna()
# dropna() 메서드는 결측값이 포함된 행 또는 열을 제거한다.
# 행 제거 : 기본적으로 결측값이 포함된 모든 행을 제거한다.
cleaned_df = df.dropna()
# 열 제거 : axis=1 옵션을 사용하여 결측값이 포함된 열을 제거한다.
cleaned_df = df.dropna(axis=1)
# thresh : 해당 매개변수를 사용하면 특정 개수 이상의 비결측값을 가진 행만 남길 수 있다.
cleaned_df = df.dropna(thresh=1) # 최소 1개의 비결측값이 있는 행만 남김
결측값 대체하기
결측값을 제거하는 대신 대체하는 방법도 있다.
## fillna()
# fillna() 메서드는 결측값을 특정 값으로 대체한다.
filled_df = df.fillna(0) # 결측값을 0으로 대체
# 결측값을 평균, 중앙값 또는 최빈값으로 대체할 수 있다.
mean_value = df['B'].mean()
filled_df = df['B'].fillna(mean_value)
# 이전 또는 이후 값으로 대체 할 수 있다.
filled_df = df.fillna(method='ffill') # 이전 값으로 대체
filled_df = df.fillna(method='bfill') # 이후 값으로 대체
결합하기
앞서 같은 행의 데이터로 덮어씌우는 방식으로 결측치를 처리를 했다고 언급했는데,
바로 `combine_first()` 메서드를 사용하여 결측치를 처리하는 방법이다.
해당 메서드는 두 개의 시리즈를 결합하여 결측값을 처리하는 데에 유용하다.
첫 번째 시리즈의 값이 NaN인 경우에만 두 번째 시리즈의 값을 사용한다.
s1 = pd.Series([1, 2, None, 4])
s2 = pd.Series([None, 3, 5, None])
result = s1.combine_first(s2)
print(result)
## 결과
0 1.0
1 2.0
2 5.0
3 4.0
dtype: float64
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Python] Jira API 사용하기 (0) | 2025.01.20 |
---|---|
[Pandas] 데이터프레임 컬럼 순서 변경하기 (0) | 2025.01.06 |
[Pandas] SQL 쿼리로 데이터프레임으로 불러오기 (read_sql) (1) | 2024.12.17 |
[Python] Tabulate (0) | 2024.12.05 |
[Python] Asyncio (0) | 2024.11.13 |