如何合并字典列表并将其转换为Python中的多个数据帧?

时间:2017-04-05 16:23:43

标签: python list pandas dictionary

我有几个词典列表,我想将它们转换为数据帧。我首先使用update将字典列表转换为字典字典,然后使用pd.concat连接每个字典。

我按医院ID对数据进行分组,每个列表都有两个词典。在每个字典中,数据框的列为'hospital''patientID''results'

# Hospital35006 Adults Test results
diabetes_35006 =
[{'hospital': [35006, 35006], 'patientID': [0001, 0002], 'results': [0,1]}] #Adult Patients(18-25yrs) 
[{'hospital': [35006, 35006], 'patientID': [0003, 0004], 'results': [1,0]}] #Adult Patients(25-30yrs)


# Hospital35007 Adults Test results
diabetes_35007 = 
[{'hospital': [35007, 35007], 'patientID': [0001, 0002], 'results': [0,1]}] #Adult Patients(18-25yrs)
[{'hospital': [35007, 35007], 'patientID': [0003, 0004], 'results': [1,0]}] #Adult Patients(25-30yrs)


def resultDF(test_results):
    adults_test_results = {} 
    for results in test_results:
        adults_test_results.update(results) #Concatenate two adults test results in diabetes_35006 & diabetes_35007 
    dataframe = pd.concat(adults_test_results, ignore_index = True) 
    return dataframe

hospital_35006 = resultDF(diabetes_35006)
hospital_35007 = resultDF(diabetes_35007)

由于我也有来自其他10家医院的测试结果,我是否可以添加到我的代码中以更有效地生成数据帧,而不是每次都写hosiptal_35006 = resultDF(diabetes_35006) ...等等?

1 个答案:

答案 0 :(得分:0)

我认为最好的做法是使用字典词典(“糖尿病”),然后使用字典理解将其转换为数据帧字典(“医院”)。

此链接可用于避免基于字符串动态生成变量的诱惑:http://stupidpythonideas.blogspot.co.uk/2013/05/why-you-dont-want-to-dynamically-create.html

我假设(?)你有正确的输入(dicts列表):

# Hospital35006 Adults Test results
diabetes_35006 =\
[{'hospital': [35006, 35006], 'patientID': [0001, 0002], 'results': [0,1]},\
#Adult Patients(18-25yrs)\
{'hospital': [35006, 35006], 'patientID': [0003, 0004], 'results': [1,0]}]
 #Adult Patients(25-30yrs)


# Hospital35007 Adults Test results
diabetes_35007 = \
[{'hospital': [35007, 35007], 'patientID': [0001, 0002], 'results': [0,1]},\
#Adult Patients(18-25yrs)
{'hospital': [35007, 35007], 'patientID': [0003, 0004], 'results': [1,0]}]
 #Adult Patients(25-30yrs)

首先,您可以简化将字典列表转换为DataFrame的功能:

def resultDF(test_results):
    return pd.concat([pd.DataFrame(res) for res in test_results]).reset_index(drop = True)

然后,我建议将所有结果分组到一个字典中并一次性将它们转换为DF:

test_dict = {35006 : diabetes_35006,
             35007 : diabetes_35007}

res_dict = {key: resultDF(el) for key, el in test_dict.iteritems()}  

所以你有:

res_dict[35006]
Out[64]: 
   hospital  patientID  results
0     35006          1        0
1     35006          2        1
2     35006          3        1
3     35006          4        0

   hospital  patientID  results
0     35007          1        0
1     35007          2        1
2     35007          3        1
3     35007          4        0