Создать json из pandas фрейма данных с индексом datetime - PullRequest
1 голос
/ 19 июня 2020

У меня проблемы с сохранением кадра данных pandas в json:

Я знаю pandas .DataFrame.to_ json, но все еще проблема с go

от этого:

import pandas as pd

df = pd.DataFrame([[0, 1], [2, 3]],

                  index=pd.to_datetime(['2020-02-03 02:59:33', '2020-02-06 02:44:33']),

                  columns=['Var1', 'Var2'])

к этому:

Var1=df.columns[0]
Var2=df.columns[1]

dev='mydevice'
json={
        "device":dev,
        "signals":{
                      Var1: 
                      {"history" : [
                        {"value" : 0,"date" : "2020-02-03T02:59:33.000+0000"},
                        {"value" : 2,"date" : "2020-02-06T02:44:33.000+0000"}
                            ]}},
                      Var2: 
                      {"history" : [
                        {"value" : 1,"date" : "2020-02-03T02:59:33.000+0000"},
                        {"value" : 3,"date" : "2020-02-06T02:44:33.000+0000"}
                            ]}}

Дата обязана этому второму формату вывода

Ты все для тебя, я здесь, чтобы решить любые возможные сомнения по вопросу.

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете получить желаемый результат с помощью df.to_dict() и вложенного l oop.

    signals = {}
    for key, val in df.to_dict(orient='dict').items():
        signals[key] = {'history': []}
        for k, v in val.items():
            signals[key].get('history').append({'value': v, 'date': k.strftime('%Y-%m-%dT%H:%M:%S.000+0000')})
    json_ = {"device": 'mydevice',
             "signals": signals}

Результат:

{'device': 'mydevice',
 'signals': {'Var1': {'history': [{'date': '2020-02-03T02:59:33.000+0000',
                                   'value': 0},
                                  {'date': '2020-02-06T02:44:33.000+0000',
                                   'value': 2}]},
             'Var2': {'history': [{'date': '2020-02-03T02:59:33.000+0000',
                                   'value': 1},
                                  {'date': '2020-02-06T02:44:33.000+0000',
                                   'value': 3}]}}}
...