【问题标题】:How to create a pandas dataframe from a nested dictionary with lists of dictionaries?如何从带有字典列表的嵌套字典创建熊猫数据框?
【发布时间】:2021-06-14 14:45:14
【问题描述】:

我有一本这样的字典:

dictionary = {'user1':[{'product1':10}, {'product2':15}, {'product3': 20}],
 'user2':[{'product1':13}, {'product2':8}, {'product3': 50}]}

我想构建一个数据框,在其中我可以看到 user1 和 user2 作为索引,product1、product2 和 product3 作为列,这些产品的值应该是列的值。我试着看这里,发现这个帖子Construct pandas DataFrame from items in nested dictionary,但我的数据格式不同,我不知道如何让产品成为我的专栏。到目前为止,我在第一行的第一列中得到了“'product1':10”作为我的值。使用 orient='index' 使我的主键成为索引,仅此而已。请帮帮我。

【问题讨论】:

  • 你尝试过熊猫json_normalize
  • @BhavaniRavi,我认为这行不通
  • 不,我没有。我对此并不熟悉。如果您可以提供代码示例,那将非常有帮助。谢谢。

标签: python pandas dictionary


【解决方案1】:

一种选择是将listsdicts 合并为一个dict,然后构建一个DataFrame.from_dict

import pandas as pd
from collections import ChainMap

dictionary = {'user1': [{'product1': 10}, {'product2': 15}, {'product3': 20}],
              'user2': [{'product1': 13}, {'product2': 8}, {'product3': 50}]}

df = pd.DataFrame.from_dict(
    {k: dict(ChainMap(*v)) for k, v in dictionary.items()},
    orient='index'
)

df:

       product3  product2  product1
user1        20        15        10
user2        50         8        13

natsort 的可选字母数字排序:

from natsort import natsorted

df = df.reindex(columns=natsorted(df.columns))
       product1  product2  product3
user1        10        15        20
user2        13         8        50

{k: dict(ChainMap(*v)) for k, v in dictionary.items()}
{'user1': {'product3': 20, 'product2': 15, 'product1': 10},
 'user2': {'product3': 50, 'product2': 8, 'product1': 13}}

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 2023-01-14
  • 2021-11-28
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多