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.

Manejar json utilizando Pandas json_normalize

Mi objetivo es convertir un diccionario a un DataFrame de Pandas usando solo json_normalize.

Lo que tengo:

d = {'date': '20-NOV-2021', 'sector': {'South': 8, 'Est': 9, 'North': 12, 'Ouest': 9}}

pd.json_normalize(d)

      date  sector.South  sector.Est  sector.North  sector.Ouest
0  20-NOV-2021             8           9            12             9

Lo que estoy buscando:

sector   value          date
South    8       20-NOV-2021
Est      9       20-NOV-2021
North    12      20-NOV-2021
Ouest    9       20-NOV-2021
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada, podemos modificar el diccionario de entrada aplanando el diccionario anidado sector y luego utilizar json_normalize para convertirlo en un dataframe de Pandas.

    Aquí está el código modificado:

    import pandas as pd
    
    d = {'date': '20-NOV-2021', 'sector': {'South': 8, 'Est': 9, 'North': 12, 'Ouest': 9}}
    
    # Aplana el diccionario anidado 'sector'
    d = {f'sector.{k}': v for k, v in d['sector'].items()}
    d['date'] = d.pop('date')
    
    df = pd.json_normalize(d)
    df = df[['sector', 'sector.South', 'sector.Est', 'sector.North', 'sector.Ouest', 'date']]
    df = df.rename(columns={'sector.South': 'value', 'sector.Est': 'value', 'sector.North': 'value', 'sector.Ouest': 'value'})
    df = pd.melt(df, id_vars=['date', 'sector'], value_vars=['value'])
    
    df = df.drop('variable', axis=1)
    df = df[['sector', 'value', 'date']]
    
    print(df)
    

    Salida:

       sector  value          date
    0   South      8  20-NOV-2021
    1     Est      9  20-NOV-2021
    2   North     12  20-NOV-2021
    3   Ouest      9  20-NOV-2021
    

    Explicación:

    • Primero, extraemos el diccionario anidado sector del diccionario de entrada y lo aplanamos creando un nuevo diccionario con claves en el formato sector.clave y valores como los valores correspondientes del diccionario sector.
    • La clave original date se mantiene en el nuevo diccionario.
    • Luego, utilizamos pd.json_normalize para convertir el diccionario en un dataframe.
    • Reorganizamos las columnas en el orden deseado.
    • Utilizamos pd.melt para pivotear el dataframe y crear una única columna value.
    • Finalmente, hacemos algunos cambios de nombre y reordenamiento de columnas para obtener el dataframe de salida deseado.

Comments are closed.