首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从包含键、子键和列表的嵌套python字典创建数据帧

从包含键、子键和列表的嵌套python字典创建数据帧
EN

Stack Overflow用户
提问于 2019-08-29 12:44:31
回答 1查看 130关注 0票数 1

我正在尝试使用包含键、子键和列表的嵌套字典的一部分来创建pandas数据帧。我可以用我需要的键和子键创建一个数据帧,但我不知道如何拉入与子键相关联的列表。

我的字典是这样的:

代码语言:javascript
复制
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代码信息的数据帧,包括列表。通过这样做,我可以得到其中的一部分:

代码语言:javascript
复制
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]

但我想不出怎么把列表放到数据框里。我希望输出如下所示:

代码语言:javascript
复制
    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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 13:26:58

假设密钥结构是恒定的,下面是一种简单的方法:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57703100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档