通过嵌套的键,子键和列表的python字典创建数据框

时间:2019-08-29 04:44:31

标签: python-3.x pandas dataframe dictionary

我正在尝试使用包含键,子键和列表的嵌套字典的一部分来创建熊猫数据框。我可以使用所需的键和子键创建一个数据框,但是我不知道如何提取与子键关联的列表。

我的字典看起来像这样:

medical_code_dict = {'Cardiac': {'snomed': ['123456789'],
                                 'icd10': [],
                                 'icd9': ['V12.3'],
                                 'loinc': {'125-6':['234','567','890'],
                                           '542-0':['098','765','432']}},
                      'Stroke': {'snomed': [],
                                 'icd10': ['Z12.3'],
                                 'icd9': [],
                                 'loinc': {}},
                      'Blindness': {'snomed': [],
                                    'icd10': [],
                                    'icd9': [],
                                    'loinc': {'345-7':['345','780']}}}

我想创建一个区域代码信息的数据框,包括列表。通过执行此操作,我可以进入其中的一部分:

loinc_test_1 = {}

for key in medical_code_dict.keys():
    loinc_test_1[key] = (medical_code_dict[key]['loinc'])

loinc_test_2 = {}

for k,v in loinc_test_1.items():
    for x in v:
        loinc_test_2.setdefault(x,[]).append(k)

loinctable = pd.DataFrame(loinc_test_2.items(), columns=['loinc', 'SDOH'])

loinctable

     loinc   SDOH
0    125-6   [Cardiac]
1    542-0   [Cardiac]
2    345-7   [Blindness]

但是我不知道如何将列表插入数据框。我希望输出看起来像这样:

    loinc   SDOH         response
0   125-6   [Cardiac]    234
1   125-6   [Cardiac]    567
2   125-6   [Cardiac]    890
3   542-0   [Cardiac]    098
4   542-0   [Cardiac]    765
5   542-0   [Cardiac]    432
6   345-7   [Blindness]  345
7   345-7   [Blindness]  780

1 个答案:

答案 0 :(得分:0)

假设密钥结构是恒定的,这是一种幼稚的方法:

import pandas as pd

medical_code_dict = {'Cardiac': {'snomed': ['123456789'],
                                 'icd10': [],
                                 'icd9': ['V12.3'],
                                 'loinc': {'125-6':['234','567','890'],
                                           '542-0':['098','765','432']}},
                      'Stroke': {'snomed': [],
                                 'icd10': ['Z12.3'],
                                 'icd9': [],
                                 'loinc': {}},
                      'Blindness': {'snomed': [],
                                    'icd10': [],
                                    'icd9': [],
                                    'loinc': {'345-7':['345','780']}}}

buf = []

for key in medical_code_dict.keys():
    loinc = medical_code_dict[key]['loinc']
    if loinc.keys():
        for l_key in loinc.keys():
            for l_val in loinc[l_key]:
                buf.append({'loinc' : l_key, 'SDOH' : key, 'response' : l_val})

df = pd.DataFrame(buf)


>>> df
        SDOH  loinc response
0    Cardiac  125-6      234
1    Cardiac  125-6      567
2    Cardiac  125-6      890
3    Cardiac  542-0      098
4    Cardiac  542-0      765
5    Cardiac  542-0      432
6  Blindness  345-7      345
7  Blindness  345-7      780