【问题标题】:Flattening Nested dictionary into Dataframe Python [duplicate]将嵌套字典展平为 Dataframe Python [重复]
【发布时间】:2021-06-02 07:48:28
【问题描述】:

我正在尝试将嵌套字典展平为 pandas 数据框。我为多个数据集尝试了其他一些答案,但它们都很接近,但不是我想要的。

如果能帮助我找出最好的扁平化方法,我将不胜感激。

以下是字典条目的示例:

data = {1:{
      'Name': "Thrilling Tales of Dragon Slayers",
      'IDs':{
            "StoreID": ['123445452543'],
            "BookID": ['543533254353'],
            "SalesID": ['543267765345']},
     2:{
      'Name': "boring Tales of Dragon Slayers",
      'IDs':{
            "StoreID": ['111111', '1121111'],
            "BookID": ['543533254353', '4324232342'],
            "SalesID": ['543267765345', '4353543']}}

这是预期的输出

Name                                StoreID        BookID          SalesID
Thrilling Tales of Dragon Slayers   123445452543   543533254353    543267765345

感谢所有帮助。非常感谢:)

编辑: 感谢您迄今为止的努力,我根据迄今为止收到的答案重新评估。我拥有的数据是通过 pkl 文件加载的,我假设给定它的格式(如上所示)以及它最初是一个嵌套字典的事实,它可以被展平。情况似乎并非如此。如果这与当前的努力相冲突,我们深表歉意。

【问题讨论】:

  • 该示例是否涵盖所有用例?您还可以更正您的语法吗? 1: 没有意义
  • @adirabargil 条目中的1: 是因为这就是字典的格式,我没有创建它,我只是在处理它。它是增量的,所以下一个是2: 等等。该示例大致涵盖了所有情况,有些情况(例如)具有多个商店 ID 或销售 ID,但应该不会有太大变化,对吧?
  • 那你能给我们展示更多吗?相应地更改您的问题并解决您的语法问题

标签: python pandas dataframe dictionary


【解决方案1】:

假设这是涵盖该问题的示例:

example_dict = {
1:{ 'Name': "Thrilling Tales of Dragon Slayers",
     'IDs':{
            "StoreID": ['11','31'],
            "BookID": ['12','32'],
            "SalesID": ['13','33']}},
2:{ 'Name': "Thrilling Tales of Dragon Slayers2",
     'IDs':{
            "StoreID": ['21'],
            "BookID": ['22'],
            "SalesID": ['23']}}
}

这是一个可用于创建 df 的解决方案:

flat_dict = [
    dict(Name=item["Name"],StoreID=item['IDs']["StoreID"][i],BookID=item['IDs']["BookID"][i],SalesID=item['IDs']["SalesID"][i]) 
     for item in example_dict.values() 
    for i in range(len(item['IDs']["StoreID"])) 
]
df = pd.DataFrame(flat_dict)

df的输出:

    Name                                StoreID BookID  SalesID
0   Thrilling Tales of Dragon Slayers   11      12      13
1   Thrilling Tales of Dragon Slayers   31      32      33
2   Thrilling Tales of Dragon Slayers2  21      22      23

【讨论】:

  • 所以这看起来应该可以工作,但是我最终得到一个错误,指出“元组索引必须是切片的整数,而不是 str”
  • 这个具体例子中没有,你能提供更多信息吗?
  • 好的,我明白我最初的写作在哪里搞砸了,错误仍然是一样的,而不是“元组”它是“价值”(我用的是项目而不是价值)我认为我添加到问题中的最新信息也可能有所帮助。这是来自导入文件的字典,所以我认为它可能无法像普通字典一样被识别。
  • 尝试打印
  • 我认为这不会解决它 - 错误位于循环中,特别是在触发错误的 for i in range(len(item["IDs"]["StoreID"]))
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2020-10-22
  • 2019-11-15
相关资源
最近更新 更多