Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

575
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!