Pandas eliminar filas con NaN

Suraj Joshi 30 enero 2023
  1. Pandas elimina filas con NaN usando el método DataFrame.notna()
  2. Pandas sólo elimina las filas con valores NaN para todas las columnas utilizando el método DataFrame.dropna()
  3. Pandas elimina filas sólo con valores NaN para una columna en particular usando el método DataFrame.dropna()
  4. Pandas elimina filas con valores NaN para cualquier columna usando el método DataFrame.dropna()
Pandas eliminar filas con NaN

Este tutorial explica cómo podemos eliminar todas las filas con valores NaN utilizando los métodos DataFrame.notna() y DataFrame.dropna().

Utilizaremos el DataFrame en el código de ejemplo que se muestra a continuación.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)

print(data)

Producción :

      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN

Pandas elimina filas con NaN usando el método DataFrame.notna()

El método DataFrame.notna() devuelve un objeto booleano con el mismo número de filas y columnas que el DataFrame llamante. Si un elemento no es NaN, se asigna al valor True en el objeto booleano, y si un elemento es un NaN, se asigna al valor False.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)

print("")

data = data[data["Income($)"].notna()]
print("DataFrame after removing rows with NaN value in Income Field:")
print(data)

Resultado:

Initial DataFrame:
      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN

DataFrame after removing rows with NaN value in Income Field:
     Name   Age  Income($)  Expense($)
0   Alice  19.0     4000.0      3000.0
1  Steven   NaN     5000.0      2000.0
3   Chris  21.0     3500.0     25000.0

Aquí, aplicamos el método notna() a la columna Income($), que devuelve un objeto serie con valores True o False dependiendo de los valores de la columna. Cuando pasamos el objeto booleano como índice al DataFrame original, sólo obtenemos filas sin valores NaN para la columna Income($).

Pandas sólo elimina las filas con valores NaN para todas las columnas utilizando el método DataFrame.dropna()

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna(how="all")
print("DataFrame after removing rows with NaN value in All Columns:")
print(data)

Resultado:

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in All Columns:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0

Elimina sólo las filas con valores NaN para todos los campos del DataFrame. Establecemos how='all' en el método dropna() para que el método elimine la fila sólo si todos los valores de las columnas de la fila son NaN.

Pandas elimina filas sólo con valores NaN para una columna en particular usando el método DataFrame.dropna()

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna(subset=["Id"])
print("DataFrame after removing rows with NaN value in Id Column:")
print(data)

Resultado:

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in Id Column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0

Se eliminan todas las columnas del DataFrame que tienen un valor NaN sólo en la columna Id.

Pandas elimina filas con valores NaN para cualquier columna usando el método DataFrame.dropna()

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna()
print("DataFrame after removing rows with NaN value in any column:")
print(data)

Producción :

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in any column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
3  345.0  21.0     3500.0     25000.0

Por defecto, el método dropna() eliminará todas las filas que tengan al menos un valor NaN.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artículo relacionado - Pandas DataFrame Row

Artículo relacionado - Pandas NaN