Вот способ построить JSON (вроде) динамически.Вам все еще нужно сделать несколько предположений, и я не уверен, что ваш сценарий использования допустит следующее:
- Имена столбцов уникальны.
- Вы знаете имя столбцаВы хотите использовать в качестве столбца «значение».В моем примере фрейма данных я назвал этот
value
, sample_frequency
будет столбцом «значение» в вашем примерном фрейме данных. - Вы будете использовать индекс фрейма данных в качестве параметра
ìd
.Это может или не может быть приемлемым.Может случиться так, что вам также нужно будет определить этот столбец заранее, и в этом случае вы должны установить его как индекс кадра данных, используя .set_index()
.
С тем, что сказано:
import pandas as pd
import numpy as np
import json
data = pd.DataFrame(
{
'meta_1': np.random.choice(['A', 'B', 'C'], 10),
'meta_2': np.random.choice(['Blue', 'Green', 'Red'], 10),
'value': np.random.rand(10)
}
)
print(data)
Вот данные:
meta_1 meta_2 value
0 A Red 0.095142
1 C Red 0.855082
2 C Blue 0.619704
3 B Green 0.371495
4 A Red 0.000771
5 B Green 0.027218
6 B Blue 0.655847
7 B Blue 0.657976
8 A Green 0.060862
9 C Red 0.702788
Теперь установите столбец, который вы хотите использовать в качестве столбца «значение».
val_col_name = 'value'
Затем составьте список с вложенным пониманием dict:
json.dumps([{'id': i, 'metadata': {j: row[j] for j in data.columns if j != val_col_name}, val_col_name: row[val_col_name]} for i, row in data.iterrows()])
Дает:
[{"id": 0, "metadata": {"meta_1": "B", "meta_2": "Red"}, "value": 0.3169439789955154}, {"id": 1, "metadata": {"meta_1": "C", "meta_2": "Green"}, "value": 0.5672345948633107}, {"id": 2, "metadata": {"meta_1": "B", "meta_2": "Red"}, "value": 0.36909249143056766}, {"id": 3, "metadata": {"meta_1": "C", "meta_2": "Red"}, "value": 0.8033913639248945}, {"id": 4, "metadata": {"meta_1": "B", "meta_2": "Red"}, "value": 0.04500655943447107}, {"id": 5, "metadata": {"meta_1": "A", "meta_2": "Red"}, "value": 0.43388699497426875}, {"id": 6, "metadata": {"meta_1": "C", "meta_2": "Green"}, "value": 0.14265358049247878}, {"id": 7, "metadata": {"meta_1": "C", "meta_2": "Red"}, "value": 0.7823049064345722}, {"id": 8, "metadata": {"meta_1": "B", "meta_2": "Blue"}, "value": 0.9522025604707016}, {"id": 9, "metadata": {"meta_1": "C", "meta_2": "Red"}, "value": 0.3863207799791931}]