Saltar al contenido

Cómo llenar los valores nan con la media móvil en pandas

Solución:

Esto debería funcionar:

input_data_frame[var_list]= input_data_frame[var_list].fillna(pd.rolling_mean(input_data_frame[var_list], 6, min_periods=1))

Tenga en cuenta que el window es 6 porque incluye el valor de NaN sí mismo (que no se cuenta en el promedio). Tambien el otro NaN los valores no se utilizan para los promedios, por lo que si se encuentran menos de 5 valores en la ventana, el promedio se calcula sobre los valores reales.

Ejemplo:

df = {'a': [1, 1,2,3,4,5, np.nan, 1, 1, 2, 3, 4, 5, np.nan] }
df = pd.DataFrame(data=df)
print df

      a
0   1.0
1   1.0
2   2.0
3   3.0
4   4.0
5   5.0
6   NaN
7   1.0
8   1.0
9   2.0
10  3.0
11  4.0
12  5.0
13  NaN

Producción:

      a
0   1.0
1   1.0
2   2.0
3   3.0
4   4.0
5   5.0
6   3.0
7   1.0
8   1.0
9   2.0
10  3.0
11  4.0
12  5.0
13  3.0

rolling_mean La función ha sido modificada en pandas. Si llena todo el conjunto de datos, puede usar;

filled_dataset = dataset.fillna(dataset.rolling(6,min_periods=1).mean())
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *