【问题标题】:Convert Dataframe to Nested Dictionary in Python在 Python 中将 Dataframe 转换为嵌套字典
【发布时间】:2020-07-23 19:53:44
【问题描述】:

我正在寻找一种将数据帧转换为字典的方法,这与这里所问的非常相似:

Convert pandas DataFrame to a nested dict

假设一个样本数据框

name    v1  v2  v3
0        A  A1  A11 1
1        A  A2  A12 2
2        B  B1  B12 3
3        C  C1  C11 4
4        A  A2  A21 6
5        A  A2  A21 8

列数可能不同,列名也可能不同。

我正在寻找生成:

{
    'A' : { 
        'A1' : { 'A11' : 1 },
        'A2' : { 'A12' : 2 , 'A21' : 6 , 'A21' : 8 },
        'B1' : {}, 
        'C1' : {}
    }, 

    'B' : { 
        'A1' : {},
        'A2' : {},
        'B1' : { 'B12' : 3}, 
        'C1' : {}
    },

    'C' : { 
        'A1' : {},
        'A2' : {},
        'B1' : {} ,
        'C1' : { 'C11' : 4}
    }

}

其他地方建议的方法是通过递归:

def recur_dictify(frame):
    if len(frame.columns) == 1:
        if frame.values.size == 1: return frame.values[0][0]
        return frame.values.squeeze()
    grouped = frame.groupby(frame.columns[0])
    d = {k: recur_dictify(g.ix[:,1:]) for k,g in grouped}
    return d

这给出了:

>>> pprint.pprint(recur_dictify(df))
{'A': {'A1': {'A11': 1}, 'A2': {'A12': 2, 'A21': [6,8]}},
 'B': {'B1': {'B12': 3}},
 'C': {'C1': {'C11': 4}}}

但不会复制 v2 级别的空 dict 嵌套,并将 A2 -A21 的重复分组到 array[6,8] 中。我看过Convert a Pandas DataFrame to a dictionary,到目前为止还没有运气。

【问题讨论】:

  • v2 级别的空嵌套字典与其他级别不一致,因此您需要通过专门的处理来修复您的输出。
  • @Chris 怎么样?非常欢迎任何建议
  • 我会添加一个答案。代码不适合这里。

标签: python pandas dictionary nested type-conversion


【解决方案1】:

我假设:

  • 索引没有名字
  • 列名具有值 A、B、C、D
  • 等

并且 df 包含上述 recur_dictify 的输出:

ky = frame.v1.unique() # I assume it's ['A1','B1','C1']

for k in df:
    for l in ky:
        if l not in df[k]:
            df[k][l] = {}

您的原始数据框很奇怪。 B2 条目不会出现在结果中的任何位置。

【讨论】:

  • 您好,我修复了数据示例并删除了 B2 级别以避免混淆
  • 那我的回答应该可以了。
  • frame 是您的原始“示例数据框”,位于问题文本的顶部。 df是df = recur_dictify(frame)的输出。
  • 它的定义更接近了非常感谢,唯一的问题是它将 A12 的重复集中到一个数组中,如:A21 [6, 8] 将编辑原始数据帧以说明重复的情况,appologies
猜你喜欢
  • 2013-11-16
  • 2019-04-08
  • 2023-02-10
  • 2021-06-11
  • 2018-07-13
  • 2019-12-09
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多