医疗数据组工具脚本-1代码片段
医疗数据组工具脚本-1
项目构架
项目需求:明日采样方案生成,采样管编码,送检单生成
处理日期相关代码:
获取今日日期和明日日期,数据格式为numpy.datetime64。
today=datetime.date.today()
today=np.datetime64(today)
tommorow = today+1
获取excel文件内容相关代码:
获取目录下包含名为“总表”的xlsx文件。
import os
path=os.getcwd()
files=os.listdir()
for fi in files:
if '总表' in fi and '.xls' in fi:
break
信息预处理
去掉无用信息
import pandas as pd
df=pd.read_excel(fi,keep_default_na=False)
columns=df.columns
for column in columns:
if 'Unnamed' in column:
del df[column]
时间格式统一
df['末次暴露时间'] = pd.to_datetime(df['末次暴露时间'])
去掉“转出“人员信息
df=df[~df.备注.str.contains('转出')]
按采样的分类方式排序后,按身份证号去重,可得到下次的真正采样方式。
#重写columns防止columns格式与代码不统一。
Id=[c for c in columns if '身份证号' in c ][0]
#利用身份证号去重,找到Id='身份证号'
result.drop_duplicates(subset=[Id], keep='first',inplace=True)
依据-房间号\分组- 排序
num=[c for c in columns if '房间号' in c ][0]
group=[g for g in columns if '分组' in g ][0]
result.sort_values(by=[group,num], ascending=True, inplace=True)
新表从新编号:
result=result.reset_index(drop=True,col_level=1)
result.index=result.index+1
分类新建送检单
#Rguan:人体标本送检管
Bg=Rguan[Rguan.标本类型=='鼻+咽+肛拭子']
Bg['标本类型']='鼻拭子'
Yg=Rguan[Rguan.标本类型=='鼻+咽+肛拭子']
Yg['标本类型']='咽拭子'
Gg=Rguan[Rguan.标本类型=='鼻+咽+肛拭子']
Gg['标本类型']='肛拭子'
Rg=Rguan[~(Rguan.标本类型=='鼻+咽+肛拭子')]
#将所有类型合并为一个表并按分组,房间排序。
Rg=Rg.append([Bg,Yg,Gg],ignore_index=True)
Rg.sort_values(by=['分组','房间号'], ascending=True, inplace=True)
创建明日采样目录,采样名单文件
out_day=str(tommrow)[:10]
try:
os.mkdir('./{}'.format(out_day))
except:
print('目录创建有问题,可能已经有目录了,请验证。')
result.to_excel('./{d}/{d}采样名单.xlsx'.format(d=out_day),startrow=2)
return result
环境采样管编码
def hj_work(f):
df=pd.read_excel(path+f,header=2)
names=df['采样点名称'].str.split('+',expand=True)[0]
room=df['采样点名称'].str.split('+',expand=True)[1]
nums=df[df.columns[0]].astype(str)
result='WH-'+nums+'-'+names
result=pd.concat([result,room], axis=1)
result.to_excel(path+'打码-{}'.format(f))
return