Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

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

Tengo un marco de datos que contiene valores nan en algunos lugares. Estoy tratando de realizar una limpieza de datos en la que completo los valores nan con la media de sus cinco instancias anteriores. Para ello, he llegado a lo siguiente.

 input_data_frame[var_list].fillna(input_data_frame[var_list].rolling(5).mean(), inplace=True)

Pero esto no está funcionando. No está llenando los valores nan. No hay cambios en el recuento nulo del marco de datos antes y después de la operación anterior. Suponiendo que tengo un marco de datos con solo una columna de enteros, ¿cómo puedo completar los valores de NaN con la media de las cinco instancias anteriores? Gracias por adelantado.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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 la window es 6 porque incluye el valor de NaN en sí (que no se cuenta en el promedio). Además, los otros valores de NaN 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
over 4 years ago · Santiago Trujillo Denunciar

0

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

 filled_dataset = dataset.fillna(dataset.rolling(6,min_periods=1).mean())
over 4 years ago · Santiago Trujillo Denunciar

0

simplemente puede usar interpolar ()

 df = {'a': [1,5, np.nan, np.nan, np.nan, 2, 5, np.nan] } df = pd.DataFrame(data=df) print(df) df['a'].interpolate()
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda