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.

Python: convertir un DataFrame de pandas en un diccionario de listas

Necesito convertir este DataFrame:

meterid    timestamp                  value
123       2018-04-09T21:34:55.335Z     0
123       2018-05-10T21:34:55.335Z     10
456       2018-04-09T21:34:55.335Z     200

a este formato:

{
   "data":{
      "123":[
         [
            "2018-04-09T21:34:55.335Z",
            0
         ],
         [
            "2018-05-10T21:34:55.335Z",
            10
         ]
      ],
      "456":[
         [
            "2018-04-09T21:34:55.335Z",
            200
         ]
      ]
   }
}

¿Cuál es la mejor manera de transformarlo? Intenté to_dict() con diferentes valores de orient, pero no me dio lo que quería. Cualquier ayuda sería apreciada. Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de transformar el DataFrame al formato deseado es crear un diccionario con meterid como clave y la correspondiente marca de tiempo y valor como una lista. Luego, envolver este diccionario dentro de otro diccionario con la clave “data”. Finalmente, usar la biblioteca json para convertir este diccionario al formato JSON deseado. Aquí hay un código de ejemplo:

    import pandas as pd
    import json
    
    # crear datos de muestra
    df = pd.DataFrame({
        'meterid': [123, 123, 456],
        'timestamp': ['2018-04-09T21:34:55.335Z', '2018-05-10T21:34:55.335Z', '2018-04-09T21:34:55.335Z'],
        'value': [0, 10, 200]
    })
    
    # transformar DataFrame a diccionario
    data_dict = {}
    for index, row in df.iterrows():
        meterid = str(row['meterid'])
        timestamp = row['timestamp']
        value = row['value']
        if meterid not in data_dict:
            data_dict[meterid] = []
        data_dict[meterid].append([timestamp, value])
    
    # envolver diccionario en otro diccionario con clave "data"
    result_dict = {'data': data_dict}
    
    # convertir diccionario a JSON
    result_json = json.dumps(result_dict, indent=4)
    
    print(result_json)
    

    Esto producirá el siguiente JSON:

    {
        "data": {
            "123": [
                [
                    "2018-04-09T21:34:55.335Z",
                    0
                ],
                [
                    "2018-05-10T21:34:55.335Z",
                    10
                ]
            ],
            "456": [
                [
                    "2018-04-09T21:34:55.335Z",
                    200
                ]
            ]
        }
    }
    

Comments are closed.