创建df以给定格式生成json
Posted
技术标签:
【中文标题】创建df以给定格式生成json【英文标题】:creating df to generate json in the given format 【发布时间】:2018-04-11 12:33:01 【问题描述】:我正在尝试生成一个 df 以在 json 下面生成它。
Json 数据:
"name": "flare",
"children": [
"name": "K1",
"children": [
"name": "Exact", "size": 4,
"name": "synonyms", "size": 14
]
,
"name": "K2",
"children": [
"name": "Exact", "size": 10,
"name": "synonyms", "size": 20
]
,
"name": "K3",
"children": [
"name": "Exact", "size": 0,
"name": "synonyms", "size": 5
]
,
"name": "K4",
"children": [
"name": "Exact", "size": 13,
"name": "synonyms", "size": 15
]
,
"name": "K5",
"children": [
"name": "Exact", "size": 0,
"name": "synonyms", "size": 0
]
]
输入数据:
name Exact synonyms
K1 4 14
K2 10 20
K3 0 5
K4 13 15
K5 0 0
我尝试使用 json 中的值创建 df,但无法在 df.to_json 上获得所需的 json,请帮助。
【问题讨论】:
你能展示一下你的尝试吗? 当然,我正在旅行,我会更新我的问题给我时间@Vico, @Jezrael,我编辑了问题 使用输入数据编辑问题 好的,所以需要从json
-> Dataframe
创建?我昨天尝试了一些东西,但真的很难,所以需要一些时间。
【参考方案1】:
您需要通过set_index
+ stack
重塑数据,然后使用groupby
和apply
嵌套list of dict
:
import json
df = (df.set_index('name')
.stack()
.reset_index(level=1)
.rename(columns='level_1':'name', 0:'size')
.groupby(level=0).apply(lambda x: x.to_dict(orient='records'))
.reset_index(name='children')
)
print (df)
name children
0 K1 ['name': 'Exact', 'size': 4, 'name': 'synon...
1 K2 ['name': 'Exact', 'size': 10, 'name': 'syno...
2 K3 ['name': 'Exact', 'size': 0, 'name': 'synon...
3 K4 ['name': 'Exact', 'size': 13, 'name': 'syno...
4 K5 ['name': 'Exact', 'size': 0, 'name': 'synon...
#convert output to dict
j = "name": "flare", "children": df.to_dict(orient='records')
#for nice output - easier check
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(j)
'children': [ 'children': [ 'name': 'Exact', 'size': 4,
'name': 'synonyms', 'size': 14],
'name': 'K1',
'children': [ 'name': 'Exact', 'size': 10,
'name': 'synonyms', 'size': 20],
'name': 'K2',
'children': [ 'name': 'Exact', 'size': 0,
'name': 'synonyms', 'size': 5],
'name': 'K3',
'children': [ 'name': 'Exact', 'size': 13,
'name': 'synonyms', 'size': 15],
'name': 'K4',
'children': [ 'name': 'Exact', 'size': 0,
'name': 'synonyms', 'size': 0],
'name': 'K5'],
'name': 'flare'
#convert data to json and write to file
with open('data.json', 'w') as outfile:
json.dump(j, outfile)
【讨论】:
以上是关于创建df以给定格式生成json的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2 - 自动生成 JSON 输出(就像 Spring 3.x 一样)