【问题标题】:Convert Pandas Dataframe into multi level nested JSON将 Pandas Dataframe 转换为多级嵌套 JSON
【发布时间】:2021-03-07 12:43:27
【问题描述】:

我有一个需要转换为嵌套 json 格式的数据框。我可以完成一个级别的分组,但我不知道如何进行第二个分组以及下面的嵌套。

我看了很多不同的例子,但没有什么能真正让我得到我在下面发布的例子。

import pandas as pd

data= {'Name': ['TEST01','TEST02'],
       'Type': ['Tent','Tent'],
       'Address':['123 Happy','456 Happy'],
       'City':['Happytown','Happytown'],
       'State': ['WA','NY'],
       'PostalCode': ['89985','85542'],
       'Spot' : ['A','A'],
       'SpotAssigment' : ['123','456'],
       'Cost': [900,500]
        }

df = pd.DataFrame(data)

j = (df.groupby(['Name','Type'])
             .apply(lambda x: x[['Address','City', 'State', 'PostalCode']].to_dict('r'))
              .reset_index(name='addresses')
             .to_json(orient='records'))


print(json.dumps(json.loads(j), indent=2, sort_keys=True))

我希望它看起来像下面。

[
  {
    "Name": "TEST01",
    "Type": "Tent",
    "addresses": [
      {
        "Address": "123 Happy",
        "City": "Happytown",
        "PostalCode": "89985",
        "State": "WA"
      }
    ],
     "spots":[
              {"Spot":'A',
               "SpotAssignments":[
                      "SpotAssignment":"123",
                      "Cost":900
                          ]
              }
              ]
  },
  {
    "Name": "TEST02",
    "Type": "Tent",
    "addresses": [
      {
        "Address": "456 Happy",
        "City": "Happytown",
        "PostalCode": "85542",
        "State": "NY"
      }
     ],
     "spots":[
              {"Spot":'A',
               "SpotAssignments":[
                      "SpotAssignment":"456",
                      "Cost":500
                          ]
              }
              ]
     }
]

【问题讨论】:

    标签: python json pandas dataframe nested


    【解决方案1】:

    试试这个:

    j = (df.groupby(['Name','Type'])
             .apply(lambda x: x[['Address','City', 'State', 'PostalCode']].to_dict('r'))
              .reset_index(name='addresses'))
    
    k = (df.groupby(['Name','Type', 'Spot'])
             .apply(lambda x: x[['SpotAssigment', 'Cost']].to_dict('r'))
     .reset_index(name='SpotAssignments'))
    
    
    h = (k.groupby(['Name','Type'])
             .apply(lambda x: x[['Spot','SpotAssignments']].to_dict('r'))
     .reset_index(name='spots'))
             
    
    
    m = j.merge(h, how='inner', on=['Name', 'Type'])
    result = m.to_dict(orient='records')
    
    from pprint import pprint as pp
    pp(result)
    

    这个result 是你想要的格式相同的字典的python 列表,你应该可以直接将它转储为JSON。

    【讨论】:

    • 这似乎成功了!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2021-12-09
    • 2021-12-29
    相关资源
    最近更新 更多