十六行python代码搞定两表业务数据更新(附详细讲解)
作者:互联网
最近接到一个需求,因为门诊数据表里的患者信息有大量的空值,会导致在后续数据处理及分析的过程中产生大的偏差,让我想办法把患者信息补全,借助深度的业务理解,很快就找到解决方案。针对该医院的实际运营状况,住院患者多是根据门诊患者产生的,根据患者的姓名、社保卡号可以锁定同一个人,那么开始上代码:
第一步数据读取准备工作:
import pandas as pd #分别读取住院字典表和门诊数据表 data1 = pd.read_csv('C:\\Users\\glf\\Desktop\\测试医院\\住院字典表.txt',encoding='gbk') data2 = pd.read_csv('C:\\Users\\glf\\Desktop\\测试医院\\门诊数据表.txt',names=['c0','c1','c2','c3','c4','c5','c6','c7','c8','c9','c10','c11','c12','c44']) #把读取到的数据框转换为list data1 = data1.values.tolist() data2 = data2.values.tolist() #定义一个空列表 res = []
住院字典表如图:
门诊数据表如图:
第二步业务逻辑实现:
#第一层循环遍历门诊数据表list for i in data2: #第二层循环遍历住院字典表list for j in data1: #拿到每次循环遍历的下标值进行判断是否成立 if i[12] == j[1] and i[44] == j[2]: #条件成立,则把住院字典表里的值赋给门诊数据表 i[7] = j[0] #解决在excel表科学计数法的问题 i[7] = str(i[7]) +'\t' #把成立的list追加在我们定义的res中 res.append(i) break else: #条件不成立,直接运行到这里然后进行追加 i[7] = str(i[7]) + '\t' res.append(i) #最后调用pandas的DataFrame方法,把list重新转换为数据框并导出结果 df = pd.DataFrame(res) df.to_csv('C:\\Users\\glf\\Desktop\\99.csv',index=False,header=False)
关联结果输出如图:
回顾一下,会发现在这一个需求里考到了三个知识点:
1、list和DataFrame的相互转换,在这里呢我们可以直接调用python或者pandas的一些方法进行转换,这一点是不是要比java爽的多呢,哈哈哈哈。
2、嵌套循环,我们以门诊数据表为业务主表,在每次循环遍历门诊数据时,我们都会循环遍历住院字典表,判断住院字典表中是否满足和门诊数据表信息重叠的情况,成立的话,我们就进行赋值追加到res列表中,不成立的话,我们就直接进行追加。
3、科学计数法问题,在出现过长的纯数字时,在Excel数据表里会发生科学计数法的问题,我们可以把该字段给转换为字符串,在加上\t(或者别的特殊字符),就ok了。
标签:十六行,两表,python,res,list,住院,门诊,数据表,字典 来源: https://blog.51cto.com/u_15160550/2705760