Python 在pandas中解压json字典
我有一个给你 所以我试图解压一些从api获取的专有数据 对于一个可复制的示例,一旦我解包json数据,我就会得到一个如下所示的字典Python 在pandas中解压json字典,python,json,pandas,json-normalize,Python,Json,Pandas,Json Normalize,我有一个给你 所以我试图解压一些从api获取的专有数据 对于一个可复制的示例,一旦我解包json数据,我就会得到一个如下所示的字典 temp = ([{"date" : "12/15/2020","order_id" : 1, "order_items" : [{"name" : "sponge", "quantity" : 2},{"name&q
temp = ([{"date" : "12/15/2020","order_id" : 1, "order_items" : [{"name" : "sponge", "quantity" : 2},{"name" : "soap", "quantity" : 17}]},
{"date" : "12/14/2020","order_id" : 2, "order_items" : [{"name" : "soap", "quantity" : 4}]}]
)
what_i_want = pd.DataFrame({
"date" : ["12/15/2020","12/15/2020","12/14/2020"],
"order_id" : [1,1,2],
"order_items.name" : ["sponge","soap","soap"],
"order_items.quantity" : [2,17,4]
})
然后,我使用以下代码创建一个数据帧
df = pd.json_normalize(temp)
这给了我一个数据框,看起来有点像这样
what_i_have = pd.DataFrame({
"date" : ["12/15/2020","12/14/2020"],
"order_id" : [1,2],
"order_items" : [[{'name' : 'sponge', 'quantity' : 2},{'name' : 'soap', 'quantity' : 17}],[{'name' : 'sponge', 'quantity' : 4}]]
})
现在,我发现问题在于,当我使用json_规范化时,它没有降低足够的级别。
如果我做了类似的事情
pd.json_normalize(df['order_items'][0])
它返回给我一个2行2列的数据帧。
如果我这样做
我得到了一个dataframe,在order_items列中有dataframe对象,我不知道如何使用它
我想做的是解包我在较低级别创建的表,并使数据帧更长。我希望它看起来像这样
temp = ([{"date" : "12/15/2020","order_id" : 1, "order_items" : [{"name" : "sponge", "quantity" : 2},{"name" : "soap", "quantity" : 17}]},
{"date" : "12/14/2020","order_id" : 2, "order_items" : [{"name" : "soap", "quantity" : 4}]}]
)
what_i_want = pd.DataFrame({
"date" : ["12/15/2020","12/15/2020","12/14/2020"],
"order_id" : [1,1,2],
"order_items.name" : ["sponge","soap","soap"],
"order_items.quantity" : [2,17,4]
})
有什么建议吗
另外,我认为json规范化没有达到足够的级别是因为订单项的长度不同。- 必须使用的其他参数来正确解压缩数据
将熊猫作为pd导入
#样本数据
temp=[{'date':'12/15/2020','order_id':1','order_items':[{'name':'scape','quantity':2},{'name':'soap','quantity':17}]},{'date':'12/14/2020','order_id':2',order_items':[{'name':'soap','quantity':4}]
#使用其他参数解包temp
df=pd.json_normalize(data=temp,record_path=['order_items'],meta=['date','order_id']))
#显示(df)
名称数量日期订单号
0海绵2 2020年12月15日1
1 SOAP17 2020年12月15日1
2 SOAP4 2020年12月14日2