#python #json #pandas
Вопрос:
В настоящее время у меня есть две таблицы csv. Один предназначен для фармацевтических препаратов, а другой-для нутрицевтиков:
вот Фармацевтические препараты
Drug Percentile
0 SZ Antipsychotic 57
1 AMG 811 57
2 Colchicine 57
3 Ibuprofen 29
4 Sleep Deprivation 29
5 Rofecoxib 29
а вот нутрицевтики
Drug Percentile
0 Canova 57
1 Omega-3 fatty acids 43
2 Luteolin 29
3 Ethanol Extract of Aurantiochytrium sp. (EEA) 14
4 Osthole 14
5 Arisaema amurense var. serratum 14
Мне в основном нужно объединить эти два csv-файла в один объект JSON таким образом, чтобы каждая таблица представляла собой массив словарей в паре с их соответствующей меткой. Ожидаемый результат таков (имена разные, здесь важна только структура).:
{
"nutraceuticals": [
{
"name": "Omega-3 fatty acids",
"percentile": 38
},
{
"name": "Luteolin",
"percentile": 25
},
{
"name": "Vitamin D",
"percentile": 25
},
{
"name": "Probiotics supplements",
"percentile": 13
}
],
"pharmaceuticals": [
{
"name": "Dexamethasone",
"percentile": 25
},
{
"name": "Rofecoxib",
"percentile": 25
},
{
"name": "Ibuprofen",
"percentile": 25
},
{
"name": "Laquinimod",
"percentile": 25
},
{
"name": "Lumiliximab",
"percentile": 25
}
]
}
В настоящее время у меня есть этот код:
result = Drug_Scoring.to_json(orient="records")
parsed = json.loads(result)
parsed = json.dumps(parsed, indent=4)
который создает правильный формат в коде словаря, здесь:
[
{
"Drug": " Canova",
"Percentile": 57
},
{
"Drug": " Omega-3 fatty acids",
"Percentile": 43
},
{
"Drug": " Luteolin",
"Percentile": 29
},
{
"Drug": " Ethanol Extract of Aurantiochytrium sp. (EEA)",
"Percentile": 14
}
]
и так далее, но не объединяет эти два и не имеет надлежащей маркировки, например, "pharmaceuticals": [
и "nutraceuticals": [
мне в основном нужны два имени csv-файла, чтобы быть заголовками массива в объекте JSON, а затем объединить их. Спасибо.
Ответ №1:
сначала создайте объект словаря из ваших двух фреймов данных.
d = dict(zip(['Pharmaceuticals','Nutraceuticals'],
[Pharmaceuticals,Nutraceuticals]))
out = {k : v.rename(columns={'Drug' : 'name', 'Percentile' : 'percentile'}
).to_dict(orient='records')
for k,v in d.items() }
print(out)
{'Pharmaceuticals': [{'name': 'SZ Antipsychotic', 'percentile': 57},
{'name': 'AMG 811', 'percentile': 57},
{'name': 'Colchicine', 'percentile': 57},
{'name': 'Ibuprofen', 'percentile': 29},
{'name': 'Sleep Deprivation', 'percentile': 29},
{'name': 'Rofecoxib', 'percentile': 29}],
'Nutraceuticals': [{'name': 'Canova', 'percentile': 57},
{'name': 'Omega-3 fatty acids', 'percentile': 43},
{'name': 'Luteolin', 'percentile': 29},
{'name': 'Ethanol Extract of Aurantiochytrium sp. (EEA)', 'percentile': 14},
{'name': 'Osthole', 'percentile': 14},
{'name': 'Arisaema amurense var. serratum', 'percentile': 14}]}
затем сбросьте в json.
with open('yourfile.json','w') as fp:
json.dump(out,fp,indent=4)
yourfile.json
{
"Pharmaceuticals": [
{
"name": "SZ Antipsychotic",
"percentile": 57
},
{
"name": "AMG 811",
"percentile": 57
},
{
"name": "Colchicine",
"percentile": 57
},
{
"name": "Ibuprofen",
"percentile": 29
},
{
"name": "Sleep Deprivation",
"percentile": 29
},
{
"name": "Rofecoxib",
"percentile": 29
}
],
"Nutraceuticals": [
{
"name": "Canova",
"percentile": 57
},
{
"name": "Omega-3 fatty acids",
"percentile": 43
},
{
"name": "Luteolin",
"percentile": 29
},
{
"name": "Ethanol Extract of Aurantiochytrium sp. (EEA)",
"percentile": 14
},
{
"name": "Osthole",
"percentile": 14
},
{
"name": "Arisaema amurense var. serratum",
"percentile": 14
}
]
}