Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Desafío: normalizar el JSON obtenido de la API

Este DataFrame tiene 6 columnas: genus (género), name (nombre), id, family (familia), order (orden) e nutritions (nutriciones). Observe que la columna nutritions tiene toda la información nutricional anidada en ella. Por tanto, es necesario normalizar los datos.

El desafío ahora es normalizar este DataFrame.

import requests
import json

datos_frutas = requests.get('https://fruityvice.com/api/fruit/all')

resultado = json.loads(datos_frutas.text)

# Normalizamos
df_frutas = pd.json_normalize(resultado)

Aquí surgió un problema, la clave 'nutritions' contiene un diccionario, no una lista de registros.

  1. Se normalizo el listado principal.
  2. Se normalizó la columna nutritions.
  3. Se combino el dataframe que se obtuvo de nutritions con el primer dataframe obtenido.
df_frutas = df_frutas.rename(columns=lambda column: column.replace('nutritions.', '') if 'nutritions.' in column else column)

display(df_frutas.head())

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola César, espero que estés bien

Para normalizar el DataFrame y separar la información nutricional en columnas individuales, puedes seguir estos pasos:

  1. Normalizar el JSON: Usa pd.json_normalize para aplanar los datos y extraer la información de la columna nutritions.

  2. Concatenar los DataFrames: Combina el DataFrame original con el DataFrame de nutriciones.

Aquí tienes un ejemplo de cómo hacerlo:

import requests
import pandas as pd

# Obtener los datos de la API
datos_frutas = requests.get('https://fruityvice.com/api/fruit/all')
resultado = datos_frutas.json()

# Normalizar el JSON
df_frutas = pd.json_normalize(resultado)

# Separar la columna 'nutritions'
df_nutriciones = pd.json_normalize(df_frutas['nutritions'])

# Concatenar los DataFrames
df_final = pd.concat([df_frutas.drop(columns=['nutritions']), df_nutriciones], axis=1)

# Mostrar el resultado
print(df_final.head())

Este código debería darte un DataFrame donde cada componente nutricional es una columna separada.

Espero que esto te ayude a resolver el desafío. ¡Buena suerte y sigue adelante con tus estudios!

Espero haber ayudado y buenos estudios!