Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

No me funciona esa sugerencia para responder al desafío

Saludo cordial comunidad Alura. Realizando todos los pasos al pie de la letra no funciona. Anexo el código con el error que muestra:

personas_con_diabetes = ds[ds.diabetes == 1]
promedio_personas_con_diabetes = personas_con_diabetes .glicemia.mean()

personas_sin_diabetes = ds[ds.diabetes == 0]
promedio_personas_sin_diabetes = personas_sin_diabetes .glicemia.mean()

def promedio_segun_diabetes(df, personas_con_diabetes, personas_sin_diabetes):
    nueva_glicemia = []
    for i, row in df.iterrows():
        if np.isnan(row.glicemia):
            if row.diabetes == 1:
                nueva_glicemia.append(personas_con_diabetes.glicemia.mean().round(2))
            elif row.diabetes == 0:
                nueva_glicemia.append(personas_sin_diabetes.glicemia.mean().round(2))
        else:
            nueva_glicemia.append(row.glicemia)
    return nueva_glicemia
    
nueva_glicemia = promedio_segun_diabetes(df, personas_con_diabetes, personas_sin_diabetes)
serie_glicemia = pd.Series(nueva_glicemia)
ds = ds.reset_index()
ds = ds.assign_column('glicemia_nueva', serie_glicemia)

AttributeError: 'Series' object has no attribute 'glicemia'

Se agradece cualquier ayuda o sugerencia al respecto.

2 respuestas

Hola Orlando, el error que estás obteniendo es porque estás intentando acceder al atributo 'glicemia' en un objeto de la serie 'personas_con_diabetes' y 'personas_sin_diabetes'.

En tu función 'promedio_segun_diabetes', estás pasando 'personas_con_diabetes' y 'personas_sin_diabetes' como argumentos y luego intentas acceder al atributo 'glicemia' de estos objetos. Sin embargo, estos objetos son series y no tienen un atributo 'glicemia'.

En lugar de pasar 'personas_con_diabetes' y 'personas_sin_diabetes' como argumentos a tu función, puedes pasar 'promedio_personas_con_diabetes' y 'promedio_personas_sin_diabetes'. Estos son los promedios que calculaste anteriormente y son los valores que quieres usar para rellenar los valores nulos en tu DataFrame.

Aquí está cómo podrías modificar tu función:

def promedio_segun_diabetes(df, promedio_personas_con_diabetes, promedio_personas_sin_diabetes):
    nueva_glicemia = []
    for i, row in df.iterrows():
        if np.isnan(row.glicemia):
            if row.diabetes == 1:
                nueva_glicemia.append(promedio_personas_con_diabetes)
            elif row.diabetes == 0:
                nueva_glicemia.append(promedio_personas_sin_diabetes)
        else:
            nueva_glicemia.append(row.glicemia)
    return nueva_glicemia

Y luego puedes llamar a tu función de esta manera:

nueva_glicemia = promedio_segun_diabetes(df, promedio_personas_con_diabetes, promedio_personas_sin_diabetes)

Espero que esto te ayude a resolver el problema. :)

Si este post te ayudó, por favor, marca como solucionado ✓.

solución!

Cordial saludo Erika, te agradezco el haber querido ayudarme. Hice exactamente lo mismo que me indicaste y sin embargo me seguía generando el mismo error, y al parecer el error se originaba porque en esos códigos se está utilizando tanto el 'df ' que es un DataFrame de pandas y el 'ds' que es un Dataset de ADS, en donde se debe cambiar el nombre de las columnas a español para ambos casos, debido a que en los códigos se está utilizando la variable 'glicemia' en español, pero el instructor solo le había cambiado esos nombres al 'ds' y no al 'df ' y en ese caso en el df se estaba utilizando la variable 'glucose' que el interprete de python no reconocía.