El resultado vacío de un programa escrito en python

mus -  
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   -

Hola,

Necesito su apoyo en la siguiente parte de programación:

""https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}" donde {ID} corresponde al identificador de un estudiante.

  • Desarrollen primero una serie de instrucciones para gestionar un único estudiante, luego generalicen su enfoque en un bucle que recorra una lista de identificadores, y finalmente definan la función.
  • La manera más sencilla de proceder es instanciar un DataFrame a partir de una lista de diccionarios.

He desarrollado esto, pero el resultado no muestra nada:

import pandas as pd import requests import numpy as np import json # Enviar una petición GET para recuperar la lista de IDs de estudiantes desde el endpoint student_list = [] for ID in student_list:     response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}")     student_list = response.json()       df = pd.DataFrame(student_list)     resultat = df.groupby('Student')['ID'].nunique()     print(resultat)

5 respuestas

yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
 

hola,

sugerencia:

import pandas as pd import requests import numpy as np import json # Enviar una solicitud GET para recuperar la lista de IDs de estudiantes desde el endpoint student_list = [1] for ID in student_list: response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}") student_info = response.json() print(student_info['StudentName']) 
0
mus
 

Le agradezco por su respuesta.

Sin embargo, me muestra solo un estudiante con 1.

¿Para mostrar todos los estudiantes, por favor? ¿Hay que incrementar la lista?

Gracias.

0
blux Mensajes publicados 19185 Fecha de registro   Estado Moderador Última intervención   3 452
 

Hola,

No poner el id de un estudiante debería devolver un objeto del tipo lista que incluya todos los estudiantes (de hecho, es lo que has declarado en tu código).

0
mus > blux Mensajes publicados 19185 Fecha de registro   Estado Moderador Última intervención  
 

gracias por tu respuesta,

quieres decir que con 'student'?

resultado = df.groupby('Student').nunique()

print(resultado)

0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
 

¿Has leído todo el enunciado?

import pandas as pd import requests import numpy as np import json # Enviar una solicitud GET para recuperar la lista de IDs de estudiantes desde el endpoint response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Students") student_list = response.json()["StudentList"] for ID in student_list: response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}") student_info = response.json() print(ID,student_info['StudentName']) 
0
mus
 

lo que se solicita es gestionar un único, por eso intenté resultat = df.groupby('Student')['ID'].nunique(), que no da nada:

El endpoint a utilizar es "https://examen-api.s3.eu-west-1.amazonaws.com/Student/{ID}" donde {ID} corresponde al identificador de un alumno.

Consejos:

  • No definas la función de inmediato. Primero desarrolla una serie de instrucciones para gestionar un único alumno, luego generaliza tu enfoque en un bucle que recorra una lista de identificadores y finalmente define la función.
  • La forma más sencilla de proceder es instanciar un DataFrame a partir de una lista de diccionarios en la siguiente forma:
0
blux Mensajes publicados 19185 Fecha de registro   Estado Moderador Última intervención   3 452
 

Ya:

lista_estudiantes = [] for ID in lista_estudiantes:

Para mí, mientras la lista_estudiantes no esté llena, puedes hacer todos los bucles que quieras, ¡saldrá rápido!

Ya comenzaría con un get http para tener la lista llena.


¡Hasta luego blux! "Los tontos se atreven a todo.
Es incluso por eso que los reconocemos"

0
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 938
 

Hola,

Hay varias cosas que no van bien:

  • La declaración está incompleta: ¿qué atributos quieres recuperar dados uno (o varios) identificadores de estudiantes? ¿Su nombre?
    • Esto probablemente ayudaría a aclarar por qué estás utilizando groupby y nunique.
  • Tu lista student_list (que yo llamaría más bien student_ids) no está poblada. De paso, renombraría ID a student_id, sería más claro. De hecho, en python, los nombres de variables en mayúsculas están reservados para "constantes" globales.
  • El nombre del atributo que contiene el identificador en tu DataFrame no es ID, sino StudentID. Para darse cuenta, basta con mirar lo que devuelve https://examen-api.s3.eu-west-1.amazonaws.com/Student/1
    • Ejemplo:
      { "StudentID": 1, "StudentName": "David Williams", "StudentCursus": "DA", "StudentCourses": [ 4, 2, 1, 3 ] }
  • Mientras desarrollas tu programa, deberías agregar un print después de cada instrucción para ver su resultado. Esto te permitiría ver el estado de cada variable y comprender mejor lo que está sucediendo.
  • Importa explícitamente los módulos que utilizas. En tu caso, importas numpy y json pero no los usas. Para evitar este tipo de errores, puedes utilizar flake8:
  • No es fundamental, pero al inicio del archivo falta el shebang. Sería bueno agregarlo para hacer de tu script un ejecutable.

Partiendo de la premisa de que queremos recuperar los nombres de los estudiantes:

#!/usr/bin/env python3 import pandas as pd import requests student_ids = range(3) for student_id in student_ids: url = f"https://examen-api.s3.eu-west-1.amazonaws.com/Student/{student_id}" response = requests.get(url) student_ids = response.json() df = pd.DataFrame(student_ids) print(df) resultat = df["StudentName"][0] print(resultat)

Buena suerte

0
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
 

Como se escribió el 25 de abril de 2024 a las 12:15, se puede recuperar la lista de IDs de los estudiantes así:

response = requests.get(f"https://examen-api.s3.eu-west-1.amazonaws.com/Students") student_ids = response.json()["StudentList"] for student_id in student_ids:

No veo muy bien el beneficio de reutilizar la variable "student_ids" dentro del bucle. En el mejor de los casos, es una fuente de confusión.

0
mus
 

Hola,

Le agradezco por su respuesta y precisiones.

Atentamente

0
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 938 > mus
 

@yg_be EstadoColaborador está bien recuperar toda la lista de una vez, es efectivamente mejor (me perdí ese mensaje).

@mus ¿Tienes todas tus respuestas? Si es así, ¿podemos cerrar el tema como resuelto?

0