zoukankan      html  css  js  c++  java
  • pandas小程序应用-实验

    背景:来自于日常工作,针对医院行政人员统计日常门诊信息,手工统计繁琐、容易出错的问题,结合实际特点,采用python对数据进行自动统计。

    具体步骤如下:

    1.引入python工具包。

    import pandas as pd
    import glob
    import datetime

    2.读取文件夹中的所有xls文件,将其放置到DataFrame中,并将汇总表导出。

    files=glob.glob(r"*.xls")
    datas=pd.DataFrame()
    for file in files:
        data=pd.read_excel(file,header =1)
        datas=pd.concat([data,datas]) 
    datas.to_excel("Exportfiles/汇总.xls",encoding="gbk",index=0)

    3.对DataFrame中的数据进行清洗,填充空值,去除不合理的、重复的项目。

    data_res=datas
    #数据清理
    data_res=data_res[(data_res["病人性质"]!="门诊慢病")]
    data_res=data_res[~(data_res["接诊医生"].isin(["管理员"]))]
    #去除空格
    data_res["姓名"]=data_res["姓名"].str.replace(" ","")
    # #删除重复项
    data_res.fillna("未知",inplace=True)
    data_res_last=data_res.drop_duplicates(subset=["姓名","身份证号","就诊科室"])
    data_res_last.to_excel("Exportfiles/清洗后.xls",encoding="gbk",index=0)

    4.读取科室与医生对应表,创建待输出的DataFrame。

    #每科的人数
    #针对接诊医生
    JieZhenDoc=data_res_last["接诊医生"].unique()
    dataFrame=pd.DataFrame(columns=["科室","医生","总人数","无诊断人数","无日期人数","35岁以上人数","35岁以上未测血压人数"])

    #获取医生与科室
    DoctorKeShi=pd.read_excel("原始资料/医生一览表.xls",index_col=0,header =0)
    DoctorKeShi=DoctorKeShi.reset_index()
    DoctorKeShi["姓名"]=DoctorKeShi["姓名"].str.replace(" ","")

    5.对病人年龄数据进行处理。

    #根据身份证号提取年龄
    def ExtractionAge(data):
        Id=data["身份证号"]
        if(len(Id)==18):
            year=Id[6:10]
            return datetime.datetime.now().year-int(year)
        else:
            return 101
    data_res_last["年龄"]=data_res_last["年龄"].str.replace("","")
    data_res_last["年龄"]=data_res_last["年龄"].str.replace("","00")
    data_res_last["年龄"]=data_res_last["年龄"].str.replace("","00")
    #df.loc[df['商品毛重'] > 10, '商品毛重'] = df.商品毛重 / 1000
    data_res_last.loc[data_res_last["年龄"]=="未知","年龄"]=data_res_last[data_res_last["年龄"]=="未知"].apply(lambda x:ExtractionAge(x), axis = 1)
    data_res_last["年龄"]=pd.to_numeric(data_res_last["年龄"])

    6.针对各个大夫本月的各项指标进行统计。

    for i in JieZhenDoc:
        data=data_res_last[data_res_last["接诊医生"]==i]
        ZongRenShu=data.shape[0]
        WuZhenDuanRenShu=data[data["初步诊断"]=="未知"].shape[0]
        WuRiQi=data[data["发病日期"]=="未知"].shape[0]
        NianLingO35=data[(data["年龄"]>34)&(data["年龄"]<100)].shape[0]
        NianLingO35WuXueYa=data[(data["年龄"]>34)&(data["年龄"]<100)&(data["血压"]=="未知")].shape[0]>0
        if(DoctorKeShi["科室"][DoctorKeShi["姓名"]==i].count()>0):
            Keshi=DoctorKeShi["科室"][DoctorKeShi["姓名"]==i].values[0]
            if((Keshi=="产科一区" or Keshi=="产科二区")):
               NianLingO35WuXueYa=data[(data["血压"]=="未知")].shape[0]
            if(Keshi=="新生儿室"or Keshi=="儿科二区"or Keshi=="儿科一区"):
               NianLingO35WuXueYa=0
            dataFrame.loc[i]={"科室":Keshi,"医生":i,"总人数":ZongRenShu,"无诊断人数":WuZhenDuanRenShu,"无日期人数":WuRiQi,"35岁以上人数":NianLingO35,"35岁以上未测血压人数":NianLingO35WuXueYa}
        else:
            print(i)

    7.对DataFrame中的多列进行数字化处理。

    dataFrame[['总人数', '无诊断人数', '无日期人数', '35岁以上人数', '35岁以上未测血压人数']]=(dataFrame[['总人数', '无诊断人数', '无日期人数', '35岁以上人数', '35岁以上未测血压人数']]).apply(pd.to_numeric)

    8.对未测量血压占比进行计算。

    Result_deal=dataFrame
    Result_deal["医生未测血压占比"]=Result_deal.apply(lambda x:DoctorRate(x), axis = 1)
    def DoctorRate(x):
        if(x["35岁以上人数"]==0):
            return 0
        else: 
            c=x["35岁以上未测血压人数"]/x["35岁以上人数"]
            temp="%.2f%%" % (c * 100)
            return  temp
    def DepartmentRate(x):
        if(x["35岁以上人数"]==0):
            return 0
        else: 
            c=x["35岁以上未测血压人数"]/x["35岁以上人数"]
            temp="%.2f%%" % (c * 100)
            return  temp

    9.导出医生详细列表。

    Result_deal.to_excel("Exportfiles/医生详细汇总.xls",encoding="gbk",index=0)

    10.对科室详细信息进行统计。

    Department_Res=Result_deal.groupby(["科室"]).sum().reset_index()
    Department_Res["科室未测血压占比"]=Department_Res.apply(lambda x:DepartmentRate(x), axis = 1)
    Department_Res.to_excel("Exportfiles/科室详细汇总.xls",encoding="gbk",index=0)
  • 相关阅读:
    jinja2模板引擎生成HTML【转】
    Hadoop集群安装
    批量执行工具之pssh
    Linux下安装JDK1.8
    pycharm打开远程linux ssh terminal
    tar高阶操作之加密分卷压缩与解密压缩
    Docker/Dockerfile debug调试技巧
    docker容器内挂载目录无权限 ls cannot open directory Permission denied
    bmc Linux ipmi远程管理口配置查询及密码重置
    js对input框的可编辑属性设置
  • 原文地址:https://www.cnblogs.com/wangzhenghua/p/12107250.html
Copyright © 2011-2022 走看看