Python-如何将嵌套字典加载到Pandas数据框中?

时间:2019-05-16 14:24:57

标签: python pandas dictionary nested

我有一个结构如下的长嵌套字典,如何将其加载到Pandas数据框中? FeedSpindle SpeedTool的子键始终保持相同,但是位于上方的两个级别(HeadingN1等和{{1 }},4001等在整个字典中都是唯一的,或者至少是唯一的。

我知道这样的事情:

4002

但是这看起来像一个数据透视表,在这里我更喜欢一个带有冗余信息(第pd.DataFrame.from_dict({(i,j): dictionary[i][j] for i in dictionary.keys() for j in dictionary[i].keys()}, orient='index') 条)的数据框来遍历整列。

4001

理想情况下,数据框应如下所示:

{
    "4001": {
        "Heading": {
            "Feed": [],
            "Spindle Speed": [],
            "Tool": []
        },
        "N1": {
            "Feed": [],
            "Spindle Speed": [],
            "Tool": [
                "0800"
            ]
        },
        "N10 ": {
            "Feed": [
                0.01,
                0.0006,
                0.0001,
                0.0006,
                0.0001,
                0.0006,
                0.0002,
                0.02,
                0.0004
            ],
            "Spindle Speed": [
                "M3S2630"
            ],
            "Tool": [
                "1616"
            ]
        }
    },
    "4002": {
        "Heading": {
            "Feed": [],
            "Spindle Speed": [],
            "Tool": []
        },
        "N1": {
            "Feed": [],
            "Spindle Speed": [],
            "Tool": [
                "9900"
            ]
        },
        "N10": {
            "Feed": [
                0.01,
                0.001,
                0.0004,
                0.001,
                0.005
            ],
            "Spindle Speed": [],
            "Tool": [
                "3838"
            ]
        }
    },     
    "4003": {...
             ...
             ...

2 个答案:

答案 0 :(得分:1)

在导入熊猫后将以下代码行配置为将数据帧配置为“稀疏”:

str(data)

来自pandas docs

  

选项:display.multi_sparse
  默认值:True
  功能:“稀疏化” MultiIndex显示(不显示组中外部级别的重复元素)

使用您提供的前两个分组进行输出:

enter image description here

答案 1 :(得分:1)

您快到了。您只需要重置multi_index并提供正确的列名即可:

pd.DataFrame.from_dict({(i,j): dictionary[i][j] 
                           for i in dictionary.keys() 
                           for j in dictionary[i].keys()},
                       orient='index').reset_index().rename(
    {'level_0': 'Program', 'level_1': 'Operation Number'}, axis=1)