创建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 重塑数据,然后使用groupbyapply 嵌套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的主要内容,如果未能解决你的问题,请参考以下文章

在VS中快速生成Json或XML代码

Grails 2 - 自动生成 JSON 输出(就像 Spring 3.x 一样)

从 JSON Schema 生成 C# 类 [关闭]

Pig - 生成 JSON 文件的结构格式

如何将 csv 转换为 json 并编写特定函数以使用 javascript 生成图形?

sql 为给定表生成CREATE TABLE语句(以创建具有相同结构的表)