我有几个词典列表,我想将它们转换为数据帧。我首先使用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)
...等等?
答案 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