Pandas DataFrame для вложенного JSON без изменения структуры данных - PullRequest
0 голосов
/ 05 мая 2018

у меня pandas.DataFrame:

import pandas as pd
import json
df = pd.DataFrame([['2016-04-30T20:02:25.693Z', 'vmPowerOn', 'vmName'],['2016-04-07T22:35:41.145Z','vmPowerOff','hostName']], 
                  columns=['date', 'event', 'object'])

    date                        event       object
0   2016-04-30T20:02:25.693Z    vmPowerOn   vmName
1   2016-04-07T22:35:41.145Z    vmPowerOff  hostName

Я хочу преобразовать этот фрейм данных в следующий формат:

  {
    "name":"Alarm/Error",
    "data":[
      {"date": "2016-04-30T20:02:25.693Z", "details": {"event": "vmPowerOn", "object": "vmName"}},
      {"date": "2016-04-07T22:35:41.145Z", "details": {"event": "vmPowerOff", "object": "hostName"}}
    ]
  }

Пока что я пробовал это:

df = df.to_dict(orient='records')
j = {"name":"Alarm/Error", "data":df}
json.dumps(j)

'{"name": "Alarm/Error", 
  "data": [{"date": "2016-04-30T20:02:25.693Z", "event": "vmPowerOn", "object": "vmName"}, 
           {"date": "2016-04-07T22:35:41.145Z", "event": "vmPowerOff", "object": "hostName"}
          ]
 }'

Однако это явно не помещает столбцы подробностей в их собственный словарь.

Как эффективно разделить столбец даты df и все остальные столбцы на отдельные части JSON?

1 Ответ

0 голосов
/ 05 мая 2018

Имея список и понимание слова , вы можете сделать это следующим образом:

Код:

[{'date': x['date'], 'details': {k: v for k, v in x.items() if k != 'date'}}
 for x in df.to_dict('records')]

Тестовый код:

df = pd.DataFrame([['2016-04-30T20:02:25.693Z', 'vmPowerOn', 'vmName'],
                   ['2016-04-07T22:35:41.145Z', 'vmPowerOff', 'hostName']],
                  columns=['date', 'event', 'object'])

print([{'date': x['date'],
        'details': {k: v for k, v in x.items() if k != 'date'}}
       for x in df.to_dict('records')])

Результаты:

[{'date': '2016-04-30T20:02:25.693Z', 'details': {'event': 'vmPowerOn', 'object': 'vmName'}}, 
 {'date': '2016-04-07T22:35:41.145Z', 'details': {'event': 'vmPowerOff', 'object': 'hostName'}}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...