#python #json #pandas #dataframe
Вопрос:
Поэтому я попытался поискать в Интернете, чтобы найти способ конвертировать следующий json.
{ "eTask_ID": "100", "Organization": "Power", "BidID": "2.00", "Project": "IPP - C", "Forecast%": "67", "Sponsor": "Jon R", "IsActive": "1", "InternalOrder": "null", "Forecast": "null", "BidStatus": "null", "ProjectNotes": "null", "EstimateTypeCode": "null", "Start": "null", "SponsoringDistrict": "null", "LocationState": "null", "Finish": "null", "AreaManager": "null", "CTG Vendor": "null" }
к тому, как показано ниже.
{ "eTask_ID": "100", "Organization": "Power", "BidID": "2.00", "Project": "IPP - C", "Attribute":"Forecast%", "AttrValue":"67", }, { "eTask_ID": "100", "Organization": "Power", "BidID": "2.00", "Project": "IPP - C", "Attribute":"Sponsor", "AttrValue":"Jon R", }, { "eTask_ID": "100", "Organization": "Power", "BidID": "2.00", "Project": "IPP - C", "Attribute":"IsActive", "AttrValue":"1", }, ...
Теперь здесь, если вы видите, что все атрибуты, кроме первых четырех, преобразуются в атрибут и значение атрибута и получают свои собственные записи.
Я пытался найти решение в Интернете, но я все еще пытаюсь найти решение.
Пожалуйста, помогите, если кто-нибудь может.
Заранее спасибо.
Ответ №1:
Воспользуйся pd.melt
:
import json with open('data.json') as json_data: data = json.load(json_data) out = pd.DataFrame.from_dict(data, orient='index').T .melt(['eTask_ID', 'Organization', 'BidID', 'Project'], var_name='Attribute', value_name='AttrValue') .to_json(orient='records', indent=4)
Выход:
gt;gt;gt; print(out) [ { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"Forecast%", "AttrValue":67 }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"Sponsor", "AttrValue":"Jon R" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"IsActive", "AttrValue":1 }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"InternalOrder", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"Forecast", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"BidStatus", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"ProjectNotes", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"EstimateTypeCode", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"Start", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"SponsoringDistrict", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"LocationState", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"Finish", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"AreaManager", "AttrValue":"null" }, { "eTask_ID":100, "Organization":"Power", "BidID":2, "Project":"IPP - C", "Attribute":"CTG Vendor", "AttrValue":"null" } ]
Комментарии:
1. Большое вам спасибо, Корралиен, это сработало отлично.