Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

NaN

Durante o curso, o professor fez várias vezes (considerando que todas as variáveis são arrays do numpy):

km_media = km / (ano - 2019)

Porém, como o ano de fabricação de um dos carros é 2019, acaba gerando um NaN. Existe alguma forma de testar e consertar isso (modificando o NaN por 0, por exemplo) logo na operação acima ou só é possível modificar o km_media após a operação? E qual seria o melhor jeito de fazer isso?

3 respostas
solução!

Oii Pedro, como você está?

Há várias formas de fazer isso, vou te mostrar duas delas:

  • Primeira abordagem
np.nan_to_num(km_media)
  • Segunda abordagem
km_media[np.isnan(km_media)] = 0

Em ambos os exemplos acima a modificação foi feita após a operação, mas é possível fazer diretamente:

km_media = np.nan_to_num(km / (anos - 2019))
# ou
km_media[np.isnan(km / (anos - 2019))] = 0
`

Qual utilizar? Fica a seu critério. No caso da segunda abordagem, se quiséssemos substituir por outro número que não zero, seria possível. Já na primeira, é uma função do próprio Numpy que é responsável por substituir NaN por zero por padrão, mas é possível alterar esse comportamento utilizando o parâmetro nan e passando algum valor diferente de zero: np.nan_to_num(km_media, nan=7), então, tanto faz qual abordagem utilizar.

Para para consultas futuras sobre a função nan_to_num, deixo como referência a documentação da biblioteca.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!

Olá, Pedro!

Essa era uma dúvida que eu também tinha, procurei na biblioteca Numpy e a melhor saída que encontrei foi essa:

np.divide(km, ano, out=np.zeros_like(km), where=2019-ano!=0)

Sendo que:

  • km é o dividendo;
  • ano é o divisor;
  • out é um "lugar" onde o resultado é guardado, com as mesmas dimensões do valor fornecido (nesse caso o valor fornecido é um array com as mesmas dimensões de km, onde todos os itens são zeros);
  • where é a condição para que seja efetuada a divisão, nesse caso, sempre que 2019-ano!=0. Quando a condição não for satisfeita, ele manterá o valor guardado no out, no caso, zero.

Obrigado, Nádia e Raphael !!