【问题标题】:creating df to generate json in the given format创建df以给定格式生成json
【发布时间】: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 创建?我昨天尝试了一些东西,但真的很难,所以需要一些时间。

标签: python json pandas dataframe data-analysis


【解决方案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)

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多