es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué este código está generando un error en pandas?

Estoy tratando de resolver este problema en Stepik: El dataframe con el nombre my_stat contiene 4 columnas: session_value, group, time y n_users. En la variable n_users, reemplazamos todos los valores negativos con el valor medio de n_users (excluyendo los valores negativos, por supuesto). Esto es lo que he escrito:

import pandas as pd
import numpy as np

my_stat = my_stat['session_value'].replace(np.nan, 0)
my_stat.loc[my_stat['n_users'] < 0, 'n_users'] = my_stat['n_users'].median()

Pero obtengo el siguiente error:

Error:
Traceback (most recent call last):
  File "jailed_code", line 25, in <module>
    med = my_stat['n_users'].median()
  File "/home/stepic/instances/master-plugins/sandbox/python3/lib/python3.6/site-packages/pandas/core/series.py", line 871, in __getitem__
    result = self.index.get_value(self, key)
  File "/home/stepic/instances/master-plugins/sandbox/python3/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4405, in get_value
    return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
  File "pandas/_libs/index.pyx", line 80, in pandas._libs.index.IndexEngine.get_value
  File "pandas/_libs/index.pyx", line 90, in pandas._libs.index.IndexEngine.get_value
  File "pandas/_libs/index.pyx", line 135, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index_class_helper.pxi", line 109, in pandas._libs.index.Int64Engine._check_type
KeyError: 'n_users'

¿Cómo puedo solucionarlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error sugiere que la columna n_users no existe en el dataframe my_stat o está mal escrita. Puedes verificar que los nombres de las columnas sean correctos y coincidan con los del dataframe.

    Además, la primera línea de tu código parece ser incorrecta, ya que llama solo a la columna session_value e intenta reemplazar los valores NaN por 0. En su lugar, puedes usar el método fillna() para reemplazar los valores NaN por 0 en todas las columnas:

    my_stat = my_stat.fillna(0)
    

    Luego, puedes proceder a reemplazar los valores negativos de n_users con el valor mediano, como lo hiciste antes:

    my_stat.loc[my_stat['n_users'] < 0, 'n_users'] = my_stat['n_users'][my_stat['n_users'] >= 0].median()
    

    Este código reemplaza los valores negativos de n_users con el valor mediano de n_users cuando n_users es mayor o igual a 0.

Comments are closed.