我需要你帮助将多维dict转换为pandas数据框。我从一个JSON文件中获取dict,我从API调用(Shopify)中检索该文件。
response = requests.get("URL", auth=("ID","KEY"))
data = json.loads(response.text)
"数据"字典看起来如下:
{'orders': [{'created_at': '2016-09-20T22:04:49+02:00',
'email': 'test@aol.com',
'id': 4314127108,
'line_items': [{'destination_location':
{'address1': 'Teststreet 12',
'address2': '',
'city': 'Berlin',
'country_code': 'DE',
'id': 2383331012,
'name': 'Test Test',
'zip': '10117'},
'gift_card': False,
'name': 'Blueberry Cup'}]
}]}
在这种情况下,字典有4个维度,我想将dict转换为pandas数据框。我尝试了从json_normalize()到pandas.DataFrame.from_dict()的所有内容,但我没有设法到达任何地方。当我尝试将dict转换为df时,我会得到包含列表列表的列。
有谁知道如何处理?
由于
编辑:
谢谢@piRSquared。你的解决方案工作正常但是,如果订单中有其他产品,您如何解决?因为它确实有效。具有2个产品的订单的JSON响应如下(目标是具有相同的第二行" created_at"。" email"等列):
{'orders': [{'created_at': '2016-09-20T22:04:49+02:00',
'email': 'test@aol.com',
'id': 4314127108,
'line_items': [{'destination_location':
{'address1': 'Teststreet 12',
'address2': '',
'city': 'Berlin',
'country_code': 'DE',
'id': 2383331012,
'name': 'Test Test',
'zip': '10117'},
'gift_card': False,
'name': 'Blueberry Cup'},
{'destination_location':
{'address1': 'Teststreet 12',
'address2': '',
'city': 'Berlin',
'country_code': 'DE',
'id': 2383331012,
'name': 'Test Test',
'zip': '10117'},
'gift_card': False,
'name': 'Strawberry Cup'}]
}]}
因此,对于所有销售的产品,最终的df应该是逐行的。谢谢,非常感谢你的帮助!
答案 0 :(得分:0)
有很多方法可以做到这一点。这只是我决定这样做的一种方式。你需要探索你想要看到它的代表,然后找出如何到达那里。
df = pd.DataFrame(data['orders'])
df1 = df.line_items.str[0].apply(pd.Series)
df2 = df1.destination_location.apply(pd.Series)
pd.concat([df.drop('line_items', 1), df1.drop('destination_location', 1), df2],
axis=1, keys=['', 'line_items', 'destination_location'])