HOWTO · Python

Eliminar NaN de la lista en Python

Este tutorial demuestra cómo eliminar NaN de la lista en Python.

En esta página

NaN es un valor especial de punto flotante que se suele usar para representar un resultado numérico indefinido o no representable. Es distinto de la cadena de texto habitual 'nan'. Para una lista numérica, usa math.isnan() de Python; para matrices numéricas, numpy.isnan() de NumPy es una opción práctica. Compara directamente los valores de texto para eliminar el literal 'nan'. Si los datos mezclan valores numéricos NaN y la cadena 'nan', combina pandas.isnull() con una comparación de cadenas.

Quitar NaN de una lista de Python con math.isnan()

La función math.isnan() de la biblioteca estándar de Python identifica valores numéricos NaN. Es una función, no un método. NaN no es igual a sí mismo, por lo que una comprobación como x != x puede detectarlo, aunque math.isnan() expresa la intención con mayor claridad. Usa este método cuando la lista contenga valores numéricos que math.isnan() pueda aceptar; no sirve como comprobación general para cadenas u objetos arbitrarios. Consulta la referencia de math.isnan(), disponible en inglés porque no hay un destino localizado.

Este ejemplo completo filtra una lista numérica y deja intacta la lista original:

import math

values = [1, 2, float("nan"), 4]
without_nan = [value for value in values if not math.isnan(value)]
print(without_nan)
[1, 2, 4]

Quitar NaN de una lista de Python con numpy.isnan()

Si NumPy ya forma parte de tu proyecto, numpy.isnan() aplica una comprobación numérica a una lista o matriz. Si hace falta, instala NumPy con python -m pip install numpy. El ejemplo convierte la entrada en una matriz, crea una máscara booleana, selecciona los valores que no son NaN y convierte el resultado de nuevo en una lista de Python. Por tanto, el resultado final es una lista, no una matriz de NumPy.

import numpy as np

values = [1, 2, np.nan, 4]
array = np.array(values)
without_nan = array[~np.isnan(array)].tolist()
print(without_nan)
[1.0, 2.0, 4.0]

Quitar la cadena ’nan’ de una lista de Python

Un marcador de cadena es texto común, no un NaN de punto flotante. Si tus datos ya están en una lista de cadenas, elimina el valor exacto 'nan' en minúsculas comparando cada elemento directamente. Así se conservan el tipo y la escritura de todos los elementos restantes. Cambia la comparación si tus datos usan mayúsculas, espacios u otras convenciones.

values = ["1", "2", "nan", "8"]
without_string_nan = [value for value in values if value != "nan"]
print(without_string_nan)
['1', '2', '8']

Si primero conviertes cada elemento con str(), los números que conserves también pasarán a ser cadenas. Esto puede ser útil para normalizar los datos, pero cambia los tipos del resultado; no hace falta hacerlo para eliminar una cadena que ya está en la lista.

Quitar NaN y la cadena ’nan’ de una lista mixta de Python con pandas.isnull()

Para una lista mixta, usa pandas.isnull() para identificar valores ausentes, como NaN numérico, y luego compara cada valor con la cadena literal 'nan' como condición independiente. pandas.isnull() no considera que el texto 'nan' sea un valor ausente. El siguiente ejemplo requiere pandas (python -m pip install pandas) y conserva los tipos originales de las demás cadenas y números. La referencia de pandas.isnull() describe la comprobación de valores ausentes.

import pandas as pd

values = ["Ada", 23, "nan", "London", float("nan")]
without_missing_or_string_nan = [
    value
    for value in values
    if not pd.isnull(value) and value != "nan"
]
print(without_missing_or_string_nan)
['Ada', 23, 'London']