Python pandas dropna()를 사용하여 DataFrame에서 NA 값 삭제하기

소개

이 튜토리얼에서는 판다의 DataFrame dropna() 함수를 사용하는 방법을 배우게 됩니다.

NA 값은 “사용할 수 없음”을 의미합니다. 이는 Null, None, pandas.NaT, 또는 numpy.nan에 적용될 수 있습니다. dropna()를 사용하면 이러한 값을 가진 행과 열을 삭제할 수 있습니다. 이는 유효한 데이터만을 제공하여 도움이 될 수 있습니다.

기본적으로 이 함수는 새로운 DataFrame을 반환하며 원본 DataFrame은 변경되지 않습니다.

이 튜토리얼은 Python 3.10.9, pandas 1.5.2 및 NumPy 1.24.1로 확인되었습니다.

구문

dropna()는 다음 매개변수를 사용합니다:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0 (또는 'index'), 1 (또는 'columns')}, 기본값 0
  • 0이면 누락된 값이 있는 행을 삭제합니다.
  • 1이면 누락된 값이 있는 열을 삭제합니다.
  • how: {'any', 'all'}, 기본값 'any'
  • 'any'인 경우 값 중 하나라도 NA이면 행이나 열을 삭제합니다.
  • 'all'인 경우 모든 값이 NA이면 행이나 열을 삭제합니다.
  • thresh: (옵션) 드롭 작업에 대한 임계값을 지정하는 int 값입니다.
  • subset: (옵션) 행 또는 열을 지정하는 열 레이블 또는 레이블 시퀀스입니다.
  • inplace: (옵션) bool 값입니다.
  • True인 경우 소스 DataFrame이 변경되고 None이 반환됩니다.

샘플 DataFrame 구성

유효하고 유효하지 않은 값이 포함된 샘플 DataFrame을 구성합니다:

dropnaExample.py
import pandas as pd
import numpy as np

d1 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
'ID': [1, 2, 3, 4],
'Population': [100, 200, np.nan, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT]
}

df1 = pd.DataFrame(d1)
print(df1)

이 코드는 DataFrame을 출력합니다:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT

그런 다음 추가 행과 열이 NA 값을 가진 두 번째 DataFrame을 추가합니다:

d2 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
'ID': [1, 2, 3, 4, pd.NaT],
'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
}

df2 = pd.DataFrame(d2)
print(df2)

이것은 새로운 DataFrame을 출력합니다:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT 4 NaT NaT NaT NaT NaT

다음 예제에서 이전 DataFrame을 사용하게 됩니다.

결측값이 있는 모든 행 삭제

None, NaN, 또는 NaT 값이 있는 행을 제거하려면 dropna()를 사용하십시오:

dropnaExample.py
dfresult = df1.dropna()
print(dfresult)

이것은 다음과 같이 출력됩니다:

Output
Name ID Population Regions 0 Shark 1 100 1

A new DataFrame with a single row that didn’t contain any NA values.

결측값이 포함된 모든 열 삭제

axis=1을 사용하여 None, NaN, 또는 NaT 값이 포함된 열을 제거하려면 dropna()를 사용하십시오:

dfresult = df1.dropna(axis=1)
print(dfresult)

어떤 None, NaN, 또는 NaT 값이 포함된 열이 삭제될 것입니다:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4

A new DataFrame with a single column that contained non-NA values.

값이 모두 Null인 경우 행 또는 열 삭제 how

두 번째 DataFrame 및 how를 사용하십시오:

dropnaExample.py
dfresult = df2.dropna(how='all')
print(dfresult)

NA와 모든 값을 가진 행이 삭제될 것입니다:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT

다섯 번째 행이 삭제되었습니다.

다음으로, how를 사용하고 axis를 지정하십시오:

dropnaExample.py
dfresult = df2.dropna(how='all', axis=1)
print(dfresult)

NA와 모든 값을 가진 열이 삭제될 것입니다:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT 4 NaT NaT NaT NaT

다섯 번째 열이 삭제되었습니다.

thresh가 교차되었을 때 행 또는 열 삭제

dropnaExample.py
dfresult = df2.dropna(thresh=3)
print(dfresult)

thresh를 사용하여 적어도 3개의 비-NA 값을 충족하지 않는 행을 삭제하려면 두 번째 DataFrame을 사용하십시오:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

적어도 3개의 비-NA 값을 갖지 않는 행들이 삭제됩니다:

세 번째, 네 번째 및 다섯 번째 행이 삭제되었습니다.특정 subsets에 대한 행 또는 열 삭제

dropnaExample.py
dfresult = df2.dropna(subset=['Population'])
print(dfresult)

subset을 사용하여 Population 열에 NA 값을 갖는 행을 삭제하려면 두 번째 DataFrame을 사용하십시오:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

PopulationNA 값을 갖는 행들이 삭제됩니다:

세 번째, 네 번째 및 다섯 번째 행이 삭제되었습니다.

dropnaExample.py
dfresult = df2.dropna(subset=[1, 2], axis=1)
print(dfresult)

DataFrame에서 열을 삭제할 때 subset에서 index 값을 지정할 수도 있습니다:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4 4 NaT NaT

첫 번째와 두 번째 행의 서브셋에서 NA 값을 포함하는 열들이 삭제되었습니다.

행 또는 열 삭제 후 소스 DataFrame 변경

기본적으로 dropna()는 소스 DataFrame을 수정하지 않습니다. 그러나 경우에 따라서는 inplace를 사용하여 큰 소스 DataFrame 작업 시 메모리를 절약할 수 있습니다.

dropnaExample.py
df1.dropna(inplace=True)
print(df1)

이 코드는 dfresult 변수를 사용하지 않습니다.

다음이 출력됩니다:

Output
Name ID Population Regions 0 Shark 1 100 1

원본 DataFrame이 수정되었습니다.

결론

이 문서에서는 NA 값이 포함된 행과 열을 제거하기 위해 dropna() 함수를 사용했습니다.

더 많은 Python 및 pandas 튜토리얼로 학습을 계속하세요 – Python pandas 모듈 튜토리얼, pandas 중복 행 삭제.

참고문헌

Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe