Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中解压json字典_Python_Json_Pandas_Json Normalize - Fatal编程技术网

Python 在pandas中解压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

我有一个给你

所以我试图解压一些从api获取的专有数据

对于一个可复制的示例,一旦我解包json数据,我就会得到一个如下所示的字典

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