Skip to content

Pandas Where: Pandas의 강력한 기능으로 Null 값 다루기

Updated on

데이터를 다루는 일은 우리가 하는 일의 핵심입니다. 하지만 원시 데이터는 대개 지저분하고, 불완전하며, 처리해야 할 null 값들로 가득 차 있습니다. 적절히 처리하지 않으면, null 값은 데이터 분석이나 머신러닝 작업을 수행할 때 여러 문제를 일으킬 수 있습니다. 다행히도 Python의 Pandas 라이브러리를 사용하면 데이터에 포함된 null 값을 빠르고 효과적으로 관리할 수 있습니다.

이 글에서는 Pandas의 where() 함수와 함께, Pandas에서 null 값을 처리하는 다양한 기법들을 살펴보겠습니다. Pandas DataFrame에서 결측 데이터를 식별하고 처리하는 방법, null 값을 다루는 여러 전략, 결측값 관리에 대한 모범 사례 등을 폭넓게 다룰 것입니다.

where()mask()를 언제 사용할까

where()는 조건을 만족하는 값은 유지하고 나머지를 치환하며, mask()는 그 반대를 수행합니다. 둘 다 pandas 2.x에서 pd.NA를 사용하는 nullable 시맨틱을 준수합니다.

import pandas as pd
 
s = pd.Series([10, None, 30, 40], dtype="Int64")
keep_under_35 = s.where(s < 35)     # 40 becomes <NA>
mask_nulls = s.mask(s.isna(), 0)    # fill nulls without touching valid rows

유효한 값을 그대로 두고 나머지를 null 처리하고 싶을 때는 where()를 사용하고, 기본값을 채우고 싶다면 fillna와 함께 사용하는 것이 좋습니다.

Python에서 빠르게 데이터 시각화를 만들고 싶나요?

PyGWalker 는 Jupyter Notebook 기반 환경 안에서 데이터 분석 및 시각화 워크플로를 가속해 줄 수 있는 오픈 소스 Python 프로젝트입니다.

PyGWalker (opens in a new tab)는 Pandas Dataframe(또는 Polars Dataframe)을 시각적 UI로 바꿔 주며, 드래그 앤 드롭으로 손쉽게 그래프를 만들 수 있습니다. 아래 코드를 사용해 바로 시작할 수 있습니다:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

지금 바로 다음 온라인 노트북들에서 PyGWalker를 실행해 볼 수 있습니다:

그리고 GitHub에서 ⭐️를 남기는 것도 잊지 마세요!

Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Give PyGWalker a ⭐️ on GitHub (opens in a new tab)
Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)

Pandas DataFrame에서 결측 데이터 식별 및 처리하기

데이터를 다룰 때 가장 자주 수행해야 하는 작업 중 하나는 결측 데이터가 있는지 확인하는 것입니다. Pandas는 null 값을 식별하기 위한 여러 방법을 제공합니다. 예를 들어 isnull()notnull()은 DataFrame 내 각 값이 null인지 아닌지를 나타내는 불리언 값을 반환합니다. 이 함수들을 사용해 데이터에 결측값이 존재하는지 빠르게 파악할 수 있습니다.

예를 들어, 여러 열을 가진 DataFrame이 있고 그 중 일부 열에 결측값이 포함되어 있다고 해 봅시다.

import pandas as pd
import numpy as np

data = {'name': ['Alice', 'Bob', 'Charlie'],
        'age': [25, np.nan, 30],
        'gender': ['F', 'M', 'M'],
        'income': [50000, 60000, np.nan]}

df = pd.DataFrame(data)

DataFrame에서 결측값을 확인하려면 isnull() 함수를 전체 DataFrame에 적용하면 됩니다.

print(df.isnull())

이 코드는 원래 DataFrame과 동일한 형태의 DataFrame을 반환하며, 여기서 True는 null 값을, False는 null이 아닌 값을 의미합니다.

각 열별로 결측값의 개수를 세고 싶다면, isnull()을 적용한 뒤 sum() 메서드를 사용할 수 있습니다.

print(df.isnull().sum())

이 코드는 열 이름을 인덱스로, 각 열에 포함된 결측값의 개수를 값으로 가지는 Series 객체를 반환합니다.

또한 dropna() 메서드를 사용해 null 값을 포함한 행이나 열을 제거할 수 있습니다. 이 메서드는 하나라도 null 값을 포함하는 행 또는 열을 제거합니다.

df.dropna()

또는 fillna() 함수를 사용해 null 값을 특정 값으로 대체할 수도 있습니다.

df.fillna(0)

이것들은 Pandas에서 null 값을 식별하고 처리하기 위해 사용할 수 있는 메서드들 중 일부에 불과합니다. 보다 포괄적인 목록은 Pandas 문서를 참고하세요.

Pandas에서 Null 값 다루기

데이터 분석이나 머신러닝 작업을 수행할 때 null 값은 큰 걸림돌이 될 수 있습니다. 하지만 null 값을 효과적으로 다루기 위한 다양한 전략이 있습니다. 그중 몇 가지를 살펴보겠습니다.

보간(Interpolation)

결측 데이터를 처리하는 대표적인 기법 중 하나가 보간입니다. 보간은 인접한 행의 관측값을 기반으로 결측값을 추정하는 통계 기법입니다. Pandas에서는 interpolate() 메서드를 사용해 DataFrame에 보간을 수행할 수 있습니다.

df.interpolate()

결측값 채우기(Filling Missing Values)

또 다른 전략은 결측값을 상수 값이나, 나머지 데이터로부터 계산된 값으로 채우는 것입니다. fillna() 메서드를 사용해 null 값을 특정 값으로 채울 수 있습니다.

df.fillna(0)

또한 평균(mean), 최빈값(mode), 중앙값(median) 등으로 null 값을 채울 수도 있습니다.

df.fillna(df.mean())

결측값 삭제(Dropping Missing Values)

결측값을 삭제하는 것도 일반적인 처리 전략입니다. dropna() 메서드를 사용하면 하나 이상의 null 값을 포함하는 모든 행을 삭제할 수 있습니다.

df.dropna()

null 값을 포함하는 열을 삭제할 수도 있습니다.

df.dropna(axis=1)

대치(Imputation)

대치(imputation)는 관측된 데이터를 기반으로 결측값을 추정해 채워 넣는 기법입니다. Pandas에서는 scikit-learn 패키지를 이용해 대치 작업을 수행할 수 있습니다.

from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='mean')

df[['age', 'income']] = imp.fit_transform(df[['age', 'income']])

여기 소개한 것들은 Pandas에서 null 값을 다루기 위해 사용할 수 있는 수많은 전략 중 일부일 뿐입니다. 어떤 전략이 적절한지는 문제의 특성과 결측 데이터의 성격에 따라 달라집니다.

Pandas에서 결측값을 관리하기 위한 모범 사례

결측 데이터를 처리하는 일은 쉽지 않을 수 있지만, 도움이 되는 몇 가지 모범 사례가 있습니다. Pandas에서 null 값을 관리할 때 참고할 만한 팁은 다음과 같습니다.

  • 분석을 수행하기 전에는 항상 결측 데이터가 있는지 확인한다.
  • 기술 통계를 사용해 데이터 분포를 파악하고 이상치를 식별한다.
  • 보간, 대치, 결측값 삭제 등 다양한 처리 전략을 고려해 본다.
  • 각 전략이 분석 결과에 어떤 영향을 줄 수 있는지 인지한다.
  • 데이터 시각화 도구를 사용해 데이터의 특성과 분포에 대한 인사이트를 얻는다.
  • 결측값의 존재 여부와, 분석 과정에서 이를 어떻게 처리했는지 문서화한다.

이러한 모범 사례를 따르면 데이터 내 null 값을 더 잘 관리할 수 있고, 보다 신뢰할 수 있는 데이터 분석 및 머신러닝 작업을 수행할 수 있습니다.

결론

데이터를 다룰 때 null 값은 상당한 난관이 될 수 있지만, Pandas는 결측 데이터를 식별하고 처리하기 위한 강력한 도구들을 제공합니다. 이 글에서는 Pandas의 where() 함수와 함께, Pandas에서 null 값을 다루기 위한 여러 기법과 전략들을 살펴보았습니다. 이러한 기법을 적절히 적용하고 모범 사례를 따름으로써, 데이터 속 null 값을 효과적으로 관리하고 보다 나은 데이터 분석 및 머신러닝 작업을 수행할 수 있습니다.