[英]Convert Pandas dataframe to nested JSON (without nesting as lists)
我知道这个主题还有其他主题,但我遇到了一个似乎没有其他答案可以解决的问题。
给定以下 Pandas 数据框:
a b c d
a1 b1 c1 d1
a2 b2 c2 d2
我想创建一个具有以下结构的嵌套 JSON 对象:
[
{
"a": "a1",
"b": "b1",
"nested_group":
{
"c": "c1",
"d": "d1"
}
},
{
"a": "a2",
"b": "b2",
"nested_group":
{
"c": "c2",
"d": "d2"
}
}
]
我在其他线程中找到的解决方案是使用以下代码:
j = (df.groupby(['a','b'])
.apply(lambda x: x[['c','d']].to_dict('records'))
.reset_index()
.rename(columns={0:'nested_group'})
.to_json(orient='records'))
但是,我遇到的问题是上面的代码将每个nested_group
对象放在方括号内,如下所示:
"nested_group": [
{
"c": "c2",
"d": "d2"
}
]
我试图生成的对象旨在作为 API 调用的有效负载,不幸的是,每个内部字典周围的方括号会导致 API 返回错误。 (对象顶部/底部的最外面的括号很好。)如何让 Python 不将内部字典视为列表?
重现示例数据框的代码:
import numpy as np
import pandas as pd
array = np.array([['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2']])
df = pd.DataFrame(data=array, columns=['a','b','c','d'])
先感谢您 :)
让我们试试
out = [{'a':x['a'],'b':x['b'],'nested_group':x[['c','d']].to_dict()} for _,x in df.iterrows() ]
Out[284]:
[{'a': 'a1', 'b': 'b1', 'nested_group': {'c': 'c1', 'd': 'd1'}},
{'a': 'a2', 'b': 'b2', 'nested_group': {'c': 'c2', 'd': 'd2'}}]
查看to_dict
的文档,似乎我们仍然必须使用records
选项,如果我们假设它始终是1
个元素的列表,只需使用原始代码获取第0
个元素
>>> import numpy as np
>>> import pandas as pd
>>> array = np.array([['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2']])
>>> df = pd.DataFrame(data=array, columns=['a','b','c','d'])
>>> (df.groupby(['a','b'])
.apply(lambda x: x[['c','d']].to_dict('records')[0])
.reset_index()
.rename(columns={0:'nested_group'})
.to_json(orient='records'))
'[{"a":"a1","b":"b1","nested_group":{"c":"c1","d":"d1"}},{"a":"a2","b":"b2","nested_group":{"c":"c2","d":"d2"}}]'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.