十六行python代码搞定两表业务数据更新(附详细讲解)

2021/4/14 14:55:26

本文主要是介绍十六行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 = []

住院字典表如图:

292555941100.png

门诊数据表如图:

293756666280.png

第二步业务逻辑实现:

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

关联结果输出如图:

1618382016(1).png

回顾一下,会发现在这一个需求里考到了三个知识点:

         1、list和DataFrame的相互转换,在这里呢我们可以直接调用python或者pandas的一些方法进行转换,这一点是不是要比java爽的多呢,哈哈哈哈。

         2、嵌套循环,我们以门诊数据表为业务主表,在每次循环遍历门诊数据时,我们都会循环遍历住院字典表,判断住院字典表中是否满足和门诊数据表信息重叠的情况,成立的话,我们就进行赋值追加到res列表中,不成立的话,我们就直接进行追加。

         3、科学计数法问题,在出现过长的纯数字时,在Excel数据表里会发生科学计数法的问题,我们可以把该字段给转换为字符串,在加上\t(或者别的特殊字符),就ok了。



这篇关于十六行python代码搞定两表业务数据更新(附详细讲解)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程