我正在嘗試使用 pandas 構建一個 DataFrame,但是當我獲得可變大小的 JSON 塊時,我無法處理這種情況。
例如:第一塊:
{'ad': 0,
'country': 'US',
'ver': '1.0',
'adIdType': 2,
'adValue': '5',
'data': {'eventId': 99,
'clickId': '',
'eventType': 'PURCHASEMADE',
'tms': '2019-12-25T09:57:04 0000',
'productDetails': {'currency': 'DLR',
'productList': [
{'segment': 'Girls',
'vertical': 'Fashion Jewellery',
'brickname': 'Traditional Jewellery',
'price': 8,
'quantity': 10}]},
'transactionId': '1254'},
'appName': 'xer.tt',
'appId': 'XR',
'sdkVer': '1.0.0',
'language': 'en',
'tms': '2022-04-25T09:57:04 0000',
'tid': '124'}
第二塊:
{'ad': 0,
'country': 'US',
'ver': '1.0',
'adIdType': 2,
'adValue': '78',
'data': {'eventId': 7,
'clickId': '',
'eventType': 'PURCHASEMADE',
'tms': '20219-02-25T09:57:04 0000',
'productDetails': {'currency': 'DLR',
'productList': [{'segment': 'Boys',
'vertical': 'Fashion',
'brickname': 'Casuals',
'price': 10,
'quantity': 5},
{'segment': 'Girls',
'vertical': 'Fashion Jewellery',
'brickname': 'Traditional Jewellery',
'price': 8,
'quantity': 10}]},
'transactionId': '3258'},
'appName': 'xer.tt',
'appId': 'XR',
'sdkVer': '1.0.0',
'language': 'en',
'tms': '2029-02-25T09:57:04 0000',
'tid': '124'}
現在在 ProductDetails 中產品的數量正在發生變化,在第一個塊中,我們只列出了 1 個產品并且很詳細,但是在第二個塊中,我們列出了 2 個產品并且很詳細,對于更多的塊,我們可以有任意數量的產品也適用于其他塊。(即塊~記錄)
我嘗試通過撰寫一些 python 腳本來做到這一點,但無法找到任何好的解決方案。
PS:如果需要任何進一步的細節,請在評論中告訴我。
謝謝!
uj5u.com熱心網友回復:
您可以做的是使用pd.json_normalize并擁有最“內部”的字典作為您的record_path和您感興趣的所有其他資料作為您的meta. 這是一個深入的示例,您可以如何構建它:pandas.io.json.json_normalize with very nested json
在您的情況下,例如(對于單個物件):
df = pd.json_normalize(obj,
record_path=["data", "productDetails", "productList"],
meta=([
["data", "productDetails", "currency"],
["data", "transactionId"],
["data", "clickId"],
["data", "eventType"],
["data", "tms"],
"ad",
"country"
])
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473585.html
標籤:json python-3.x 熊猫 数据框 解析
