将嵌套json导入datafram

2024-04-20 14:20:01 发布

您现在位置:Python中文网/ 问答频道 /正文

JSON字符串:

{
"PurchaseId": "Pur-001",
"Orders": [{
    "id": "154",
    "isOnline": false,
    "Store_location": {
        "Order-Date": "2019-06-04T07:35:00"
    },
    "Store_Network": [{
        "Network_Domain": "Food_Processing"
    }]
}],
"Sales": [{
    "id": "1856",
    "SalesLoads": [
        1000,
        3000,
        5000
    ],
    "Network": [{
        "id": "London_Store",
        "history": [
            0,
            1,
            2,
            0,
            0,
            0,
            0,
            0
        ],
        "Leads": {
            "From": "Mgmt-Dept",
            "time": "34hrs"
        }
    }]
}]

}

预期的数据帧:enter image description here

到目前为止我的代码:

import pandas.io.json as pd_json
data = pd_json.loads(json_str)
df=pd_json.json_normalize(data, record_path='loads')

我尝试了JSON\u Normalize,但无法将这个JSON字符串加载到数据帧中。有没有可能使用JSON Normalize来实现,或者有没有其他优化的解决方案可用。你知道吗


Tags: 数据store字符串idjsondatanetworkpd
2条回答

您可以直接将字符串导入到数据帧中,因为您必须将字符串转换为字典。 只需导入JSON并转换

json_str = json.dumps(json_data
json1_data = json.loads(data)
df= json_normalize(json1_data)

这是相当长的时间,但完成工作。希望有人能用更好的解决方案和更少的冗长来回答。你知道吗

a = {
"PurchaseId": "Pur-001",
"Orders": [{
    "id": "154",
    "isOnline": False,
    "Store_location": {
        "Order-Date": "2019-06-04T07:35:00"
    },
    "Store_Network": [{
    "Network_Domain": "Food_Processing"
}]
}],
"Sales": [{
    "id": "1856",
    "SalesLoads": [
    1000,
    3000,
    5000
],
"Network": [{
    "id": "London_Store",
    "history": [
        0,
        1,
        2,
        0,
        0,
        0,
        0,
        0
    ],
    "Leads": {
        "From": "Mgmt-Dept",
        "time": "34hrs"
    }
}]
}]}

b = pd.DataFrame.from_dict(a)


b = (b.assign(Orders_id = b.Orders[0]['id'],
              Orders_isOnline = b.Orders[0]['isOnline'],
              Orders_Store_Location_Number = pd.to_datetime(b.Orders[0]['Store_location']['Order-Date'].split('T')[0])
                                               .strftime('%m/%d/%Y'),
              Orders_Store_Network_Domain = b.Orders[0]['Store_Network'][0]['Network_Domain'],
              Sales_id = b.Sales[0]['id'],
              Sales_Load = [b.Sales[0]['SalesLoads']],
              Sales_Network_id = b.Sales[0]['Network'][0]['id'],
              Sales_Network_history = [b.Sales[0]['Network'][0]['history']],
              Sales_Leads_from = b.Sales[0]['Network'][0]['Leads']['From'],
              Sales_Lead_Time = b.Sales[0]['Network'][0]['Leads']['time']                                                    
            )
      .drop(['Orders','Sales'],axis=1)
     )

b    

相关问题 更多 >