Cómo usar dropna() de pandas en Python para eliminar valores NA de un DataFrame

Introducción

En este tutorial, aprenderás cómo utilizar la función dropna() de DataFrame de pandas.

Los valores NA son “No Disponibles”. Esto puede aplicarse a Null, None, pandas.NaT o numpy.nan. Al usar dropna(), se eliminarán las filas y columnas con estos valores. Esto puede ser beneficioso para proporcionarte solo datos válidos.

Por defecto, esta función devuelve un nuevo DataFrame y el DataFrame fuente permanece sin cambios.

Este tutorial fue verificado con Python 3.10.9, pandas 1.5.2 y NumPy 1.24.1.

Sintaxis

dropna() toma los siguientes parámetros:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: {0 (o 'índice'), 1 (o 'columnas')}, predeterminado 0
  • Si es 0, se eliminan las filas con valores faltantes.
  • Si es 1, se eliminan las columnas con valores faltantes.
  • how: {'any', 'all'}, predeterminado 'any'
  • Si es 'any', se elimina la fila o columna si alguno de los valores es NA.
  • Si es 'all', se elimina la fila o columna si todos los valores son NA.
  • thresh: (opcional) un valor int para especificar el umbral para la operación de eliminación.
  • subset: (opcional) etiqueta de columna o secuencia de etiquetas para especificar filas o columnas.
  • inplace: (opcional) un valor bool.
  • Si True, el DataFrame fuente se modifica y se devuelve None.

Construyendo DataFrames de Muestra

Construye un DataFrame de muestra que contiene 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á el 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

Luego agrega un segundo DataFrame con filas y columnas adicionales con 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)

Esto producirá un nuevo 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

Utilizarás los DataFrames anteriores en los ejemplos que siguen.

Eliminando Todas las Filas con Valores Faltantes

Usa dropna() para eliminar las filas con algún valor None, NaN, o NaT:

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

Esto producirá:

Output
Name ID Population Regions 0 Shark 1 100 1

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

Eliminación de todas las columnas con valores faltantes

Utilice dropna() con axis=1 para eliminar las columnas con cualquier valor None, NaN o NaT:

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

Las columnas con cualquier valor None, NaN o NaT serán 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.

Eliminación de filas o columnas si todos los valores son Null con how

Utilice el segundo DataFrame y how:

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

Las filas con todos los valores iguales a NA serán 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

Se eliminó la quinta fila.

A continuación, utilice how y especifique el axis:

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

Las columnas con todos los valores iguales a NA serán 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

Se eliminó la quinta columna.

Eliminar filas o columnas si se cruza un umbral con thresh

Utilice el segundo DataFrame con thresh para eliminar las filas que no cumplan el umbral de al menos 3 valores no NA:

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

Las filas que no tienen al menos 3 valores no NA serán eliminadas:

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

Se eliminaron la tercera, cuarta y quinta filas.

Eliminar filas o columnas para subconjuntos específicos

Utilice el segundo DataFrame con subset para eliminar las filas con valores NA en la columna Población:

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

Las filas que tengan valores NA en Población serán eliminadas:

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

Se eliminaron la tercera, cuarta y quinta filas.

También puede especificar los valores de índice en el subset al eliminar columnas del DataFrame:

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

Las columnas que contienen valores NA en el subconjunto de filas 1 y 2:

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

Se eliminaron la tercera, cuarta y quinta columnas.

Cambiando el DataFrame de origen después de eliminar filas o columnas con inplace

Por defecto, dropna() no modifica el DataFrame de origen. Sin embargo, en algunos casos, es posible que desee ahorrar memoria al trabajar con un DataFrame de origen grande utilizando inplace.

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

Este código no utiliza una variable dfresult.

Esto producirá la siguiente salida:

Output
Name ID Population Regions 0 Shark 1 100 1

El DataFrame original ha sido modificado.

Conclusión

En este artículo, utilizaste la función dropna() para eliminar filas y columnas con valores NA.

Continúa tu aprendizaje con más tutoriales de Python y pandas – Tutorial del módulo Python pandas, Eliminar filas duplicadas en pandas.

Referencias

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