用Python处理一份卫生费用数据

Author

Simonzhou

Published

February 21, 2025

用Python处理卫生费用数据

本篇博客用来记录2025年1月到2月帮助学弟处理一份某二级医院2018-2023年的医疗费用,最开始用的Stata,但是越往后,越感觉到Stata的难用,以及AI对这种程序的支持程度极其有限,随改用Python来继续完成相关的分析。

必须配置

运行此文档需要电脑上以安装Python,并且下列包已被安装并且能被调用:

numpy jupyter-cache pandas openpyxl

你可以使用 pipconda 进行安装: pip install jupyter-cache

初步认识数据

我们可以使用pandas包来查看部分原始数据,数据的基本样式如下:

# 安装并加载必要的包
import pandas as pd
import numpy as np

# 导入 Excel 文件
file_path = "C:/Users/asus/Desktop/test/stata/prepare.xlsx"
data = pd.read_excel(file_path, sheet_name=0, engine='openpyxl')     

# 随机抽取10个样本数据
sample_data = data.sample(n=10, random_state=42)

# 打印样本数据
print(sample_data)
      次数        出生日期 性别   年龄      医疗付费方式  国籍 新生儿出生体重 新生儿入院体重  \
1138   1  1956-09-06  男  61岁    新型农村合作医疗  中国       -       -   
2024   1  1959-08-15  女  59岁  城镇居民基本医疗保险  中国       -       -   
1605   1  1973-02-05  女  45岁    新型农村合作医疗  中国       -       -   
1975  11  2012-09-20  男   6岁    新型农村合作医疗  中国       -       -   
1701   1  1963-01-23  男  55岁         全自费  中国       -       -   
218    1  1969-06-08  女  48岁    新型农村合作医疗  中国       -       -   
1344   1  1960-09-11  女  57岁    新型农村合作医疗  中国       -       -   
252    1  1944-05-01  女  73岁    新型农村合作医疗  中国       -       -   
1921   5  2013-10-17  女   5岁    新型农村合作医疗  中国       -       -   
643    1  1997-09-02  男  20岁         全自费  中国       -       -   

                     出生地         籍贯  ... 麻醉开始时间3 麻醉结束时间3 麻醉方式3 麻醉分级3 切口部位3  \
1138           福建省莆田市秀屿区  福建省莆田市秀屿区  ...     NaN     NaN   NaN   NaN   NaN   
2024               福建莆田市         莆田  ...     NaN     NaN   NaN   NaN   NaN   
1605                 福建省          闽  ...     NaN     NaN   NaN   NaN   NaN   
1975              莆田市荔城区     福建省莆田市  ...     NaN     NaN   NaN   NaN   NaN   
1701                福建莆田       福建莆田  ...     NaN     NaN   NaN   NaN   NaN   
218                  福建省     福建省莆田市  ...     NaN     NaN   NaN   NaN   NaN   
1344  福建省福清市渔溪镇联华村火烧埔36号         福建  ...     NaN     NaN   NaN   NaN   NaN   
252                福建莆田市         莆田  ...     NaN     NaN   NaN   NaN   NaN   
1921           福建省莆田市城厢区     福建省莆田市  ...     NaN     NaN   NaN   NaN   NaN   
643                 北京通县       北京通县  ...     NaN     NaN   NaN   NaN   NaN   

     切口等级3  NNIS分级3 手术部位感染3 术前住院天数3  手术持续时间3  
1138   NaN      NaN     NaN     NaN      NaN  
2024   NaN      NaN     NaN     NaN      NaN  
1605   NaN      NaN     NaN     NaN      NaN  
1975   NaN      NaN     NaN     NaN      NaN  
1701   NaN      NaN     NaN     NaN      NaN  
218    NaN      NaN     NaN     NaN      NaN  
1344   NaN      NaN     NaN     NaN      NaN  
252    NaN      NaN     NaN     NaN      NaN  
1921   NaN      NaN     NaN     NaN      NaN  
643    NaN      NaN     NaN     NaN      NaN  

[10 rows x 202 columns]

我们可以看到,该数据的列很多,第一张表中有220列,我们需要对其进行一些筛选。

对数据的思考

从哪里开始是一个需要思考的问题,对于数据的认识决定了你处理问题的方向和效率。首先,理解数据的来源至关重要,这包括了解数据是如何收集的、收集过程中可能出现的偏差或错误。其次,明确数据的类型与结构也是关键步骤之一,不同类型的数据(如定量数据、定性数据)需要采用不同的分析方法。再者,对数据进行初步探索,比如通过可视化手段观察数据分布特征,或是计算一些基本统计量来了解数据的基本情况,能够帮助你更好地制定数据处理策略。

在真正开始处理数据之前,还需要考虑你的目标是什么。是为了回答一个具体的问题,还是为了探索潜在的模式?明确了目标之后,才能有针对性地选择合适的工具和技术。此外,考虑到数据质量的问题,数据清洗是不可跳过的一步,它包括去除异常值、填补缺失值等操作,这对于提高分析结果的准确性非常关键。

最后,保持对数据伦理的关注同样重要,在整个数据分析的过程中,确保遵循相关的隐私保护法规和道德标准,这样才能确保你的工作不仅有效,而且负责任。通过对数据全面而深刻的理解,你可以更加自信地从数据中提取有价值的信息,并为决策提供有力支持。

合并数据

这份Excel文件有6张sheet,分别是2018-2023年,首先需要检查这六张sheet中的变量是否一致:

import pandas as pd

# 导入 Excel 文件
file_path = "C:/Users/asus/Desktop/test/stata/prepare.xlsx"
sheet_names = ["2018", "2019", "2020", "2021", "2022", "2023"]

# 读取所有 sheet 的数据
sheets_data = {sheet: pd.read_excel(file_path, sheet_name=sheet) for sheet in sheet_names}

# 获取每个 sheet 的列名
sheets_columns = {sheet: set(data.columns) for sheet, data in sheets_data.items()}

# 找出所有 sheet 的共同变量和不一致的变量
common_columns = set.intersection(*sheets_columns.values())
all_columns = set.union(*sheets_columns.values())
inconsistent_columns = all_columns - common_columns

# 打印结果
print("一致的变量名:")
print(common_columns)

print("\n不一致的变量名:")
print(inconsistent_columns)

# 打印每个 sheet 的变量
for sheet, columns in sheets_columns.items():
    print(f"\n{sheet} 的变量: {columns}")
一致的变量名:
{'NNIS分级2', '手术操作名称2', '出院诊断', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '是否非计划重返手术室病例2', '切口部位1', '9.3手术用一次性医用材料费', '8.3球蛋白类制品费', '入院诊断', '术前预防性抗菌药物给药时间1', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '3.5手术费', '切口部位2', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '择期手术1', '4手术时间', '病案质量', '麻醉方式2', '腔镜手术名称2', '6手术时间', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '是否有出院31天内再住院计划', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '级别1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '手术结束时间2', '婚姻', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '离院方式', '8.5细胞因子类制品费', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '药占比%'}

不一致的变量名:
{'择期手术3', '7麻醉方式', '7愈合', '4麻醉医师', 'NNIS分级3', '7手术时间', '手术次数3', '切口等级3', '7切口', '手术开始时间3', '8手术编码', '7手术名称', '麻醉开始时间3', '8切口', '8级别', '术前住院天数3', '8手术时间', '8手术名称', '手术结束时间3', '手术操作编码3', '麻醉方式3', '手术操作名称3', '8麻醉方式', '手术持续时间3', '7手术编码', '愈合2', '8愈合', '7级别', '手术部位感染3', '麻醉结束时间3', '切口部位3', '是否微创手术2', '4麻醉方式', '麻醉分级3'}

2018 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '术前预防性抗菌药物给药时间1', '手术开始时间3', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '3.5手术费', '切口部位2', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '手术操作名称3', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术持续时间3', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '4麻醉方式', '择期手术3', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '切口等级3', '6手术时间', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '麻醉开始时间3', '3手术名称', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '手术结束时间3', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '麻醉方式3', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '手术次数3', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '级别1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '手术结束时间2', '婚姻', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '麻醉分级3', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', 'NNIS分级3', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '术前住院天数3', '3手术编码', '麻醉分级2', '新生儿出生体重', '离院方式', '8.5细胞因子类制品费', '手术操作编码3', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '愈合2', '8.4凝血因子类制品费', '职业', '手术部位感染3', '2.1病理诊断费', '麻醉结束时间3', '5.中医治疗费', '年龄', '切口部位3', '是否药物过敏', '是否有出院31天内再住院计划', '是否微创手术2'}

2019 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '7愈合', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '术前预防性抗菌药物给药时间1', '手术开始时间3', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '3.5手术费', '切口部位2', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '手术操作名称3', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '4麻醉方式', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '6手术时间', '7切口', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '手术结束时间3', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '7麻醉方式', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '手术次数3', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '7手术编码', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '级别1', '手术结束时间2', '婚姻', '7级别', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '7手术时间', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '7手术名称', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '离院方式', '8.5细胞因子类制品费', '手术操作编码3', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '愈合2', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '是否有出院31天内再住院计划', '是否微创手术2'}

2020 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '7愈合', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '8手术编码', '术前预防性抗菌药物给药时间1', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '8切口', '3.5手术费', '切口部位2', '8手术时间', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '4麻醉方式', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '6手术时间', '7切口', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '8级别', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '7麻醉方式', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '8麻醉方式', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '7手术编码', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '级别1', '手术结束时间2', '8愈合', '婚姻', '7级别', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '7手术时间', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '7手术名称', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '8手术名称', '离院方式', '8.5细胞因子类制品费', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '是否有出院31天内再住院计划'}

2021 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '7愈合', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '8手术编码', '术前预防性抗菌药物给药时间1', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '8切口', '3.5手术费', '切口部位2', '8手术时间', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '4麻醉方式', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '6手术时间', '7切口', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '8级别', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '7麻醉方式', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '8麻醉方式', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '7手术编码', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '级别1', '手术结束时间2', '8愈合', '婚姻', '7级别', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '7手术时间', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '7手术名称', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '8手术名称', '离院方式', '8.5细胞因子类制品费', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '是否有出院31天内再住院计划'}

2022 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '7愈合', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '8手术编码', '术前预防性抗菌药物给药时间1', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '8切口', '3.5手术费', '切口部位2', '8手术时间', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '4麻醉方式', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '6手术时间', '7切口', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '8级别', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '7麻醉方式', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '8麻醉方式', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '7手术编码', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '级别1', '手术结束时间2', '8愈合', '婚姻', '7级别', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '7手术时间', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '7手术名称', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '8手术名称', '离院方式', '8.5细胞因子类制品费', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '是否有出院31天内再住院计划'}

2023 的变量: {'NNIS分级2', '手术操作名称2', '出院诊断', '7愈合', '4麻醉医师', '2.3影像学诊断费', '是否有使用抗菌药物2', 'NNIS分级1', '输液反应', '4级别', '腔镜手术名称1', '入院诊断', '9.3手术用一次性医用材料费', '切口部位1', '8.3球蛋白类制品费', '是否非计划重返手术室病例2', '8手术编码', '术前预防性抗菌药物给药时间1', '4切口', '手术操作编码2', '1麻醉方式', '出院日期', '3.3手术治疗费', '清洁手术预防使用抗菌药物总天数', '手术开始时间2', '住院天数', '8切口', '3.5手术费', '切口部位2', '8手术时间', '切口等级2', '1手术时间', '细菌名称2', '出院科别', '3.2临床物理治疗费', '麻醉开始时间1', '本次住院期间有无重返手术室的计划1', '断脐后预防性使用抗菌药物给药时间2', '出生日期', '手术预防性使用抗菌药物天数1', '国籍', '术前预防性抗菌药物给药时间2', '手术预防性使用抗菌药物天数2', '5手术编码', '新生儿入院体重', '总药品费', '术前使用预防性抗菌药物2', '手术持续时间1', '病理诊断', '感染情况', '切口等级1', '术前住院天数1', '1.2一般治疗操作费', '药占比%', '4手术时间', '病案质量', '择期手术1', '麻醉方式2', '腔镜手术名称2', '6手术时间', '7切口', '5麻醉方式', '5手术名称', '输液反应次数', '断脐后预防性使用抗菌药物给药时间1', '6手术名称', '抗菌药物使用天数', '麻醉结束时间1', '6级别', '7.2中草药费', '病室.1', '入院后颅脑损伤昏迷时间', '1.1一般医疗服务费', '4愈合', '3手术名称', '8级别', '预防性抗菌药物使用时机1', '民族', '细菌名称4', '择期手术2', '术后预防性抗菌药物结束时间2', '手术操作名称1', '1手术编码', '5切口', '5愈合', '6.2抗菌药物费用', '院内感染', '4.康复费', '籍贯', '7.1中成药费', '1切口', '2手术名称', '预防性抗菌药物使用时机2', '麻醉结束时间2', '细菌名称1', '2麻醉方式', '是否有使用抗菌药物1', '手术结束时间1', '术前住院天数2', '10.其他费', '5级别', '手术操作编码1', '本次住院期间有无重返手术室的计划2', '9.2治疗用一次性医用材料费', '2.2实验室诊断费', '7麻醉方式', '1.4其他费用', '手术持续时间2', '患者入住重症监护室(ICU)情况', '2手术时间', '入院前颅脑损伤昏迷时间', '是否在术后使用预防性抗菌药物2', '1级别', '6切口', '次数', '术前使用预防性抗菌药物1', '1手术名称', '3手术时间', '性别', '输血反应', '手术部位感染1', '入院日期', '死亡患者尸检', '是否非计划重返手术室病例1', '手术次数2', '8麻醉方式', '6.1西药费', '入院途径', '血型', '8.2白蛋白类制品费', '医疗付费方式', '7手术编码', '自付金额', '细菌名称3', '是否在术后使用预防性抗菌药物1', '是否临床路径', '1.3护理费', '术后预防性抗菌药物结束时间1', '级别1', '手术结束时间2', '8愈合', '婚姻', '7级别', '血管介入治疗抗菌药物使用天数', '4手术名称', '输血反应次数', '麻醉方式1', '1愈合', '3麻醉方式', '6麻醉方式', '入院科别', '药物过敏', '2切口', '2.4临床诊断项目费', '手术次数1', '麻醉分级1', '6愈合', '7手术时间', '是否微创手术1', '级别2', '3.1非手术治疗项目费', '2愈合', '5手术时间', '病室', '2级别', '9.1检查用一次性医用材料费', '愈合1', '4手术编码', '3级别', 'RH', '7手术名称', '麻醉开始时间2', '出生地', '血管介入治疗', '总费用', '3切口', '清洁手术预防使用抗菌药物品种数', '3.4麻醉费', '手术部位感染2', '目的', '3手术编码', '麻醉分级2', '新生儿出生体重', '8手术名称', '离院方式', '8.5细胞因子类制品费', '8.1血费', '3愈合', '2手术编码', '6手术编码', '手术开始时间1', '8.4凝血因子类制品费', '职业', '2.1病理诊断费', '5.中医治疗费', '年龄', '是否药物过敏', '是否有出院31天内再住院计划'}

然后剔除不一致的变量数据,同时创建一个新变量year,用sheet的年份对其进行填充,再按变量名对应合并6张表格的数据称为一张总表,命名为merge-sheet.xlsx输出到你需要存放数据的文件夹中。

变量还是太多了,那接下来对变量进行筛选,首先我们可以对所有键值为空的变量进行剔除,或者根据实际的研究需要,剔除一部分键值全部为null的变量。

这里我选择对键值全部为null或0的变量进行剔除。

第一次尝试的时候,打开表后进行查看,发现变量顺序很乱,没有按照原始顺序进行排列,处理办法则是在前面的变量筛选部分使用DataFrameloc方法选择列,同时保持列的顺序。

同时为了节省时间,因为在Quarto中运行Python代码很慢,暂时还不知道原因,待以后调试一下。所以最后用一个程序解决上述这些问题,节省时间。

import pandas as pd

# 导入 Excel 文件
file_path = "C:/Users/asus/Desktop/test/stata/prepare.xlsx"
output_path = "C:/Users/asus/Desktop/test/stata/data/merge-data.xlsx"
final_output_path = "C:/Users/asus/Desktop/test/stata/data/cleaned-merge-data.xlsx"
sheet_names = ["2018", "2019", "2020", "2021", "2022", "2023"]

# 读取所有 sheet 的数据
sheets_data = {sheet: pd.read_excel(file_path, sheet_name=sheet) for sheet in sheet_names}

# 获取每个 sheet 的列名
sheets_columns = {sheet: set(data.columns) for sheet, data in sheets_data.items()}

# 找出所有 sheet 的共同变量
common_columns = set.intersection(*sheets_columns.values())
# 保持原始顺序
common_columns = list(common_columns)  

# 剔除不一致的变量数据,并添加 year 变量
for sheet, data in sheets_data.items():
    sheets_data[sheet] = data[list(common_columns)]
    sheets_data[sheet]['year'] = sheet

# 合并所有 sheet 的数据
merged_data = pd.concat(sheets_data.values(), ignore_index=True)

# 输出合并后的数据到指定路径
merged_data.to_excel(output_path, index=False)

# 重新导入合并后的数据
merged_data = pd.read_excel(output_path)

# 剔除键值全部为 null 或 0 的变量,同时保持原始变量的顺序
non_null_columns = merged_data.dropna(axis=1, how='all').columns
non_zero_columns = merged_data.loc[:, (merged_data != 0).any(axis=0)].columns
valid_columns = [col for col in merged_data.columns if col in non_null_columns and col in non_zero_columns]

cleaned_data = merged_data.loc[:, valid_columns]

# 输出清理后的数据到指定路径
cleaned_data.to_excel(final_output_path, index=False)

print(f"清理后的数据已输出到 {final_output_path}")

# 展示部分数据

# 随机抽取10个样本数据
sample_data = cleaned_data.sample(n=10)

# 打印样本数据
print(sample_data)
清理后的数据已输出到 C:/Users/asus/Desktop/test/stata/data/cleaned-merge-data.xlsx
      NNIS分级2          手术操作名称2  \
14033     NaN              NaN   
8455      NaN              NaN   
26016     NaN              NaN   
11010     NaN              NaN   
31721     NaN              NaN   
48837      0级  白内障摘除伴人工晶体一期置入术   
31786     NaN              NaN   
35260     NaN              NaN   
9815      NaN              NaN   
16671     NaN              NaN   

                                                    出院诊断  2.3影像学诊断费  \
14033  老年性白内障|H25.900|有,玻璃体混浊|H43.300|有,眼底出血|H35.602|...         32   
8455   特指手术后状态|Z98.800|有,并指[趾]畸形|Q70.900|有,特指手术后状态|Z9...         96   
26016  尘肺|J64.x00x001|有,肺部感染|J98.414|有,胸腔积液|J94.804|有...          0   
11010  颈椎间盘突出|M50.201|有,颈椎退行性病变|M48.901|有,高血压病|I10.x0...          0   
31721  子宫内膜息肉|N84.001|有,女性盆腔炎性疾病|N73.900|有,宫颈息肉|N84.1...          0   
48837                                  老年核性白内障|H25.100|有         36   
31786  多处挫伤|T00.901|有,多发性脑梗死|I63.905|有,支气管扩张伴感染|J47.x...          0   
35260  多发性结肠息肉|K63.504|临床未确定,直肠息肉|K62.100|临床未确定,慢性萎缩性...          0   
9815   多发性结肠息肉|K63.504|有,慢性结肠炎|K52.910|有,甲状腺结节|E04.101|有          0   
16671  腰椎间盘突出|M51.202|有,腰椎退行性病变|M48.903|有,原发性单侧膝关节病|M...          0   

      是否有使用抗菌药物2 NNIS分级1 输液反应  4级别 是否非计划重返手术室病例2 切口部位1  ... 8.1血费  3愈合  \
14033        NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   
8455         NaN     NaN  NaN  NaN           NaN   NaN  ...  32.2  NaN   
26016        NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   
11010        NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   
31721        NaN     NaN  NaN  1.0           NaN   NaN  ...  34.0   其他   
48837          无      0级    无  NaN             否    左眼  ...   0.0  NaN   
31786        NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   
35260        NaN     NaN  NaN  1.0           NaN   NaN  ...   0.0    甲   
9815         NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   
16671        NaN     NaN  NaN  NaN           NaN   NaN  ...   0.0  NaN   

             2手术编码 6手术编码              手术开始时间1    职业   年龄 是否药物过敏  药占比%  year  
14033          NaN   NaN                  NaN    农民  66岁      无    2%  2020  
8455           NaN   NaN                  NaN    工人  47岁      无   14%  2019  
26016          NaN   NaN                  NaN  退休人员  67岁      无   24%  2021  
11010          NaN   NaN                  NaN    职员  66岁      无    0%  2019  
31721  68.1200x001   NaN                  NaN    农民  34岁      无   12%  2021  
48837  13.7100x001   NaN  2023-12-29 17:50:40    农民  72岁      无    1%  2023  
31786          NaN   NaN                  NaN    其他  74岁      无   40%  2021  
35260  45.4300x013   NaN                  NaN    其他  62岁      无    6%  2022  
9815           NaN   NaN                  NaN  城乡居民  32岁      无    4%  2019  
16671          NaN   NaN                  NaN    居民  62岁      无    0%  2020  

[10 rows x 160 columns]