AI智能
改变未来

十六行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\'])#把读取到的数据框转换为listdata1 = data1.values.tolist()data2 = data2.values.tolist()#定义一个空列表res = []

住院字典表如图:

门诊数据表如图:

第二步业务逻辑实现:

#第一层循环遍历门诊数据表listfor 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了。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 十六行python代码搞定两表业务数据更新(附详细讲解)