Python - как загрузить вложенный словарь в Pandas dataframe? - PullRequest
1 голос
/ 16 мая 2019

У меня длинный вложенный словарь, структурированный, как показано ниже, как я могу загрузить его в фрейм данных Pandas?Субкнопки Feed, Spindle Speed и Tool остаются неизменными, но два вышеприведенных уровня (Heading, N1 и т. Д. И 4001, 4002 и т. Д. Являются уникальными или, по крайней мере,в уникальном порядке по всему словарю.

Я знаю что-то вроде этого:

pd.DataFrame.from_dict({(i,j): dictionary[i][j] 
                           for i in dictionary.keys() 
                           for j in dictionary[i].keys()},
                       orient='index')

Но это похоже на сводную таблицу, где я бы предпочел фрейм данных с избыточныминформация (liek 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": {...
             ...
             ...

Кадр данных в идеале должен выглядеть примерно так:

Program Operation Number    Feed        Tool      Spindle Speed
4001    Heading             []          []        []
4001    N1                  []          ['0800']  []
4001    N10                 [0.01, ...] ['1616']  ['M3S2630']

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вы были почти там. Вы просто должны сбросить 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)
1 голос
/ 16 мая 2019

Запустите эту строку кода после импорта pandas, чтобы ваши кадры данных не были «разреженными»:

pd.set_option('display.multi_sparse', False)

От Документы панд :

Опция: display.multi_sparse
По умолчанию: True
Функция: отображение MultiIndex «Sparsify» (не отображать повторяющиеся элементы на внешних уровнях внутри групп)

Вывод с использованием первых двух предоставленных вами группировок:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...