HOWTO · Python

Remover NaN da lista em Python

Este tutorial demonstra como remover NaN da lista em Python.

Nesta página

NaN é um valor especial de ponto flutuante, usado com frequência para representar um resultado numérico indefinido ou não representável. Ele é diferente da string comum 'nan'. Para uma lista numérica, use math.isnan() do Python; para arrays numéricos, numpy.isnan() do NumPy é uma opção prática. Para remover a string literal 'nan', compare os valores como texto. Em dados mistos que contenham tanto NaN numérico quanto a string 'nan', combine pandas.isnull() com uma comparação de strings.

Remover NaN de uma lista Python com math.isnan()

A função math.isnan() da biblioteca padrão do Python identifica valores NaN numéricos. Ela é uma função, não um método. NaN não é igual a si mesmo, então uma verificação como x != x pode identificá-lo, mas math.isnan() deixa a intenção mais clara. Use essa abordagem quando a lista contiver valores numéricos aceitos por math.isnan(); ela não é um teste geral para strings ou objetos arbitrários. Não há uma referência localizada para math.isnan() disponível em português, então o link abaixo aponta para a referência em inglês: math.isnan() reference.

Este exemplo completo filtra uma lista numérica sem alterar a 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]

Remover NaN de uma lista Python com numpy.isnan()

Se o NumPy já faz parte do seu projeto, numpy.isnan() aplica um teste numérico a uma lista ou array. Se necessário, instale o NumPy com python -m pip install numpy. O exemplo converte a entrada em um array, cria uma máscara booleana, seleciona os valores que não são NaN e converte o resultado de volta para uma lista Python. Portanto, o resultado final é uma lista, não um array 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]

Remover a string ’nan’ de uma lista Python

Um valor sentinela em forma de string é texto comum, não um NaN de ponto flutuante. Se os dados já estiverem em uma lista de strings, remova o valor exato em minúsculas 'nan' comparando cada item diretamente. Isso preserva o tipo e a grafia de cada item mantido. Altere a comparação se seus dados usarem outras combinações de maiúsculas e minúsculas ou espaços em branco.

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

Se você converter primeiro cada item com str(), os números mantidos também se tornarão strings. Isso pode ser útil para normalizar os dados, mas altera os tipos do resultado; não é necessário fazer essa conversão apenas para remover uma string que já está na lista.

Remover NaN e a string ’nan’ de uma lista Python mista com pandas.isnull()

Em uma lista mista, use pandas.isnull() para identificar valores ausentes, como NaN numérico, e depois compare cada valor com a string literal 'nan' como uma condição separada. pandas.isnull() não considera o texto 'nan' como ausente. O exemplo a seguir requer o pandas (python -m pip install pandas) e mantém os demais textos e números com seus tipos originais. A referência de pandas.isnull() descreve a verificação 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']