Таблица Pandas в JSON
Есть таблица пандас вида:
iterables = [["2020Q1", "2020Q2"], ["yugo_id_1", "yugo_id_2"]]
table_1 = pd.DataFrame(columns = ['result'], index = pd.MultiIndex.from_product(iterables,
names = ["preiod", "yugo_id"]), data = [1,2,3,4])
table_1
result
preiod yugo_id
2020Q1 yugo_id_1 1
yugo_id_2 2
2020Q2 yugo_id_1 3
yugo_id_2 4
При конвертировании ее в формат JSON получаю следующий массив:
result = table_1.to_json(orient="index")
parsed = json.loads(result)
parsed
{"('2020Q1', 'yugo_id_1')": {'result': 1},
"('2020Q1', 'yugo_id_2')": {'result': 2},
"('2020Q2', 'yugo_id_1')": {'result': 3},
"('2020Q2', 'yugo_id_2')": {'result': 4}}
При этом мне нужно, чтобы JSON имел следующую структуру:
{
"2020Q1": { "yugo_id_1": {'result': 1},
"yugo_id_2": {'result': 2}
},
"2020Q2": { "yugo_id_1": {'result': 3},
"yugo_id_2": {'result': 4}
}
}
По идее, формат таблицы пандас может быть любым, главное, чтобы на выходе получился нужный JSON.
Ответы (1 шт):
Автор решения: Александр Гордеев
→ Ссылка
def df_to_dict(df):
if df.ndim == 1:
return df.to_dict()
ret = {}
for key in df.index.get_level_values(0):
sub_df = df.xs(key)
ret[key] = df_to_dict(sub_df)
return ret
print(json.dumps(df_to_dict(table), indent=4))