【问题标题】:How to transform a pandas df to a complex json structure?如何将 pandas df 转换为复杂的 json 结构?
【发布时间】:2021-05-02 17:33:59
【问题描述】:

当前的 pandas 数据框:

people animal frequencies
Bob dog 2
Bob cat 1
Bob parrot 1
Kate dog 1
Kate parrot 1
Joy cat 3

所需的输出(这个 json 字典):

dictionary={'title': 'frequencies',
            'children': [{'animal': 'dog', 'people': [{'name': 'Bob', 'freq': 2}, {'name':'Kate', 'freq': 1}]},
                         {'animal': 'cat', 'people': [{'name': 'Bob', 'freq': 1}, {'name':'Joy', 'freq': 3}]},
                         {'animal': 'parrot', 'people': [{'name':'Kate', 'freq': 1}, {'name':'Bob', 'freq': 1}]}]}

目前,我仅将上述 pandas df 转换为字典列表。我想这是如何开始的? :

list_dicts = df.to_dict('records')

导致:

list_dicts = [{'people': 'Bob', 'animal': 'dog', 'frequencies': 2},
              {'people': 'Bob', 'animal': 'cat', 'frequencies': 1},
              {'people': 'Bob', 'animal': 'parrot', 'frequencies': 1},
              {'people': 'Kate', 'animal': 'dog', 'frequencies': 1},
              {'people': 'Kate', 'animal': 'parrot', 'frequencies': 1},
              {'people': 'Joy', 'animal': 'cat', 'frequencies': 3}]

【问题讨论】:

    标签: python json pandas dictionary


    【解决方案1】:
    >>> list_dicts = [{"people": "Bob", "animal": "dog", "frequencies": 2},
    ...               {"people": "Bob", "animal": "cat", "frequencies": 1},
    ...               {"people": "Bob", "animal": "parrot", "frequencies": 1},
    ...               {"people": "Kate", "animal": "dog", "frequencies": 1},
    ...               {"people": "Kate", "animal": "parrot", "frequencies": 1},
    ...               {"people": "Joy", "animal": "cat", "frequencies": 3}]
    >>> 
    >>> temp = defaultdict(list)
    >>> for item in list_dicts:
    ...     temp[item["animal"]].append({"name": item["people"], "freq": item["frequencies"]})
    ... 
    >>> result = {"title": "frequencies", "children":[
    ...     {"animal": animal, "people": people} for animal, people in temp.items()
    ... ]}
    >>> result
    {'title': 'frequencies', 'children': [{'animal': 'dog', 'people': [{'Bob': 2}, {'Kate': 1}]}, {'animal': 'cat', 'people': [{'Bob': 1}, {'Joy': 3}]}, {'animal': 'parrot', 'people': [{'Bob': 1}, {'Kate': 1}]}]}
    
    

    【讨论】:

    • 我在问题中编辑了“期望的输出”。我实际上想让嵌套的“人”字典有额外的键。所以而不是 {'Bob': 2} --> [{'name': 'Bob'}, {'freq': 2},...] 。 (一开始没有意识到是我的错!对不起!)
    猜你喜欢
    • 2019-12-20
    • 2021-12-18
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2020-10-17
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多