Como Usar o dropna() do pandas em Python para Remover Valores NA de um DataFrame

Introdução

Neste tutorial, você aprenderá como usar a função dropna() do DataFrame do pandas.

Os valores NA significam “Não Disponível”. Isso pode se aplicar a Null, None, pandas.NaT, ou numpy.nan. Usar dropna() irá eliminar as linhas e colunas com esses valores. Isso pode ser benéfico para fornecer apenas dados válidos.

Por padrão, esta função retorna um novo DataFrame e o DataFrame de origem permanece inalterado.

Este tutorial foi verificado com Python 3.10.9, pandas 1.5.2 e NumPy 1.24.1.

Sintaxe

A função dropna() recebe os seguintes parâmetros:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0 (ou 'index'), 1 (ou 'columns')}, padrão 0
  • Se 0, elimina as linhas com valores ausentes.
  • Se 1, elimina as colunas com valores ausentes.
  • how: {'any', 'all'}, padrão 'any'
  • Se 'any', elimina a linha ou coluna se qualquer um dos valores for NA.
  • Se 'all', elimina a linha ou coluna se todos os valores forem NA.
  • thresh: (opcional) um valor int para especificar o limite para a operação de exclusão.
  • subset: (opcional) rótulo da coluna ou sequência de rótulos para especificar linhas ou colunas.
  • inplace: (opcional) um valor bool.
  • Se True, o DataFrame de origem é alterado e None é retornado.

Construindo DataFrames de Exemplo

Construa um DataFrame de exemplo que contenha valores válidos e inválidos:

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)

Este código imprimirá o 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

Em seguida, adicione um segundo DataFrame com linhas e colunas adicionais com valores NA:

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)

Isso resultará em um novo 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

Você usará os DataFrames anteriores nos exemplos a seguir.

Excluindo Todas as Linhas com Valores Ausentes

Use dropna() para remover as linhas com qualquer valor None, NaN ou NaT:

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

Isso resultará em:

Output
Name ID Population Regions 0 Shark 1 100 1

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

Eliminar Todas as Colunas com Valores Ausentes

Utilize dropna() com axis=1 para remover colunas com qualquer valor None, NaN ou NaT:

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

As colunas com qualquer valor None, NaN ou NaT serão eliminadas:

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.

Eliminar Linhas ou Colunas se todos os Valores Forem Nulos com how

Utilize o segundo DataFrame e how:

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

As linhas com todos os valores iguais a NA serão eliminadas:

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

A quinta linha foi eliminada.

Em seguida, utilize how e especifique o axis:

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

As colunas com todos os valores iguais a NA serão eliminadas:

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

A quinta coluna foi eliminada.

Descartando Linhas ou Colunas se um Limiar for Ultrapassado com thresh

Use o segundo DataFrame com thresh para descartar as linhas que não atendem ao limiar de pelo menos 3 valores não NA:

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

As linhas que não têm pelo menos 3 valores não NA serão descartadas:

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

A terceira, quarta e quinta linhas foram descartadas.

Descartando Linhas ou Colunas para subconjuntos Específicos

Use o segundo DataFrame com subset para descartar as linhas com valores NA na coluna População:

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

As linhas que têm valores NA em População serão descartadas:

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

A terceira, quarta e quinta linhas foram descartadas.

Você também pode especificar os valores do índice no subset ao descartar colunas do DataFrame:

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

As colunas que contêm valores NA no subconjunto das linhas 1 e 2:

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

A terceira, quarta e quinta colunas foram descartadas.

Alterando o DataFrame de origem após a exclusão de linhas ou colunas com inplace

Por padrão, dropna() não modifica o DataFrame de origem. No entanto, em alguns casos, você pode desejar economizar memória ao trabalhar com um grande DataFrame de origem usando inplace.

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

Este código não utiliza uma variável dfresult.

Isso resultará em:

Output
Name ID Population Regions 0 Shark 1 100 1

O DataFrame original foi modificado.

Conclusão

Neste artigo, você utilizou a função dropna() para remover linhas e colunas com valores NA.

Continue sua aprendizagem com mais tutoriais de Python e pandas – Tutorial do Módulo Python pandas, Removendo Linhas Duplicadas no pandas.

Referências

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