Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Substituindo automaticamente os NaNs

Existe uma meneira mais prática de substituir os valores NaNs do que encontrando-os manualmente:

# Para todos os elementos do arranjo
for i in range(len(Kaliningrad)):
  # Se o elemento for NaN
  if np.isnan(Kaliningrad[i]):
      # E não for o último elemento
      if i != len(Kaliningrad)-1:
        # Recebe a média do elemento anterior e posterior
        Kaliningrad[i] = (Kaliningrad[i-1] + Kaliningrad[i+1]) / 2
      # Se for o último elemento
      else:
        # Recebe o valor do penúltimo elemento
        Kaliningrad[i] = Kaliningrad[i-1]

Neste caso, caso o último elemento seja um NaN, ele será substituido pelo penúltimo. Existe alguma outra meneira melhor de realizar esta substituição?

1 resposta
solução!

Olá Rodrigo, tudo bem?

Para substituir valores NaN de forma mais prática e eficiente, você pode utilizar a função np.nan_to_num() do NumPy ou a função fillna() do Pandas, caso esteja trabalhando com DataFrames. Mas, se você deseja substituir os NaNs especificamente pela média dos valores adjacentes, uma abordagem mais automática seria usar a função interpolate() do Pandas, que é bastante útil para esse tipo de tarefa.

Abaixo deixo um exemplo de código utilizando interpolate():

import pandas as pd
import numpy as np

# Criando um array do NumPy
Kaliningrad = np.array([42.67, 44.37, 44.73, 46.75, np.nan, 51.59, 57.80, 62.14, 56.76, 50.85])

# Convertendo para um DataFrame do Pandas
df = pd.DataFrame(Kaliningrad, columns=['values'])

# Usando interpolate para substituir NaNs
df['values'] = df['values'].interpolate()

# Convertendo de volta para um array do NumPy, se necessário
Kaliningrad = df['values'].to_numpy()

Kaliningrad

Para saber um pouco mais, deixo também links das documentações abaixo:

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado