assets/2026-07-01-医数智联系列开篇-医院数字化工作者的工具箱_2026-07-01_18-28-11.jpg

[!ABSTRACT] 核心摘要

  • 本期主题:Python 入门——医院人零基础友好,30 分钟跑通第一个脚本
  • 核心结论:Python 是医院人的「瑞士军刀」——能算、能画、能爬、能自动化,语法比 Excel 公式还直观
  • 3 大优势:语法简单(像读英语)+ 生态最强(库多到用不完)+ AI 友好(Claude Code / Copilot 优先支持)
  • 5 个最小例子:变量、循环、判断、函数、读写文件
  • 典型效果:从「加班到深夜」变成「脚本 5 分钟搞定」
  • 阅读时长:约 10 分钟

一、场景引入:为什么医院人必须学 Python?

[!example] 一个真实的周五下午
周五下午 5 点,质管办小李要把 200 份病案首页导出,清洗后做主诊错误率统计。

他打开 Excel:

  1. 复制粘贴 200 条 → 15 分钟;
  2. 删除重复行 → 5 分钟;
  3. 用 VLOOKUP 关联诊断表 → 公式错了,半小时;
  4. 重做一遍 → 半小时;
  5. 出图 → 插入图表,选数据,调格式,半小时

2 小时后,他终于交出报告。

但他听说隔壁信息科的小王用 Python 5 分钟就搞定了同样的事——他想知道:Python 是啥?比 Excel 难吗?

这是医院数据工作的普遍困境——Excel 看起来好用,但数据量一大、逻辑一复杂就崩溃

场景 Excel Python
200 行数据清洗 OK OK
100 万行数据 卡死/崩溃 流畅
重复性工作(每月都做) 每次手动 1 次写脚本,永久自动
多表关联查询 VLOOKUP,公式复杂 pandas merge,5 行代码
自动出报告 手动 自动生成 PDF
跨文件批量处理 手动打开多个文件 1 行代码遍历 1000 个文件

[!quote] 狼叔的判断
“Excel 是’最后一公里’,Python 是’整条公路’。” 这一期,带你 30 分钟入门 Python,跑通第一个脚本,从此告别加班


二、工具原理:Python 是什么?

2.1 Python 是什么?

[!info] Python 简介
Python 是一款通用编程语言,诞生于 1991 年,作者 Guido van Rossum。

它的核心哲学是「优雅、明确、简单」,语法像读英语一样

江湖地位:

  • TIOBE 2024:#1 编程语言(连续 3 年)
  • 医院应用:HIS 数据接口、AI 模型部署、自动化报告,几乎都是 Python

2.2 为什么医院必须会 Python?

[!TIP] 5 大理由

  1. 语法简单:print("你好") 就是中文的「打印(你好)」
  2. 生态最强:pandas(数据)、matplotlib(画图)、requests(网络) 等 30 万+ 库
  3. AI 友好:Claude Code、Copilot 对 Python 支持最好,自动写代码
  4. 医疗专属库:PyMedTermino(医学术语)、medspaCy(医学 NLP)
  5. 回报巨大:会 Python 的医院人,效率提升 5-10 倍

2.3 Python vs Excel 思维差异

1
2
3
4
5
Excel 思维:鼠标点、手动操作
Python 思维:写代码、自动化执行

Excel:"我要把这些数据清洗一下"
Python:"我写一个函数,所有数据都自动清洗"

三、医院实战:30 分钟跑通 5 个最小例子

3.1 安装与配置

[!tip] 3 步安装

Step 1:下载 Python

Step 2:安装时勾选「Add Python to PATH」

  • 这一步很重要,不勾选后续会很麻烦

Step 3:安装编辑器

Step 4:验证安装
打开命令行(cmd / PowerShell / Terminal),输入:

1
2
3
4
5
python --version
# 输出:Python 3.11.x 表示安装成功

pip --version
# 输出:pip 23.x.x 表示包管理器可用

3.2 例子 1:Hello,医院!(变量与打印)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding: utf-8 -*-
# 这是注释,# 后面的文字不会执行
print("Hello,医院!")
print("我是白衣狼,医院质管办新人")

# 变量赋值
医生姓名 = "李医生"
科室 = "骨科"
工号 = "D001"
工龄 = 15

# 打印变量
print(f"医生:{医生姓名}")
print(f"科室:{科室}")
print(f"工龄:{工龄}年")

# 字符串 f-string 格式化(把变量插入文字)
print(f"{医生姓名}{科室}的医生,工号 {工号},工龄 {工龄} 年")

运行结果:

1
2
3
4
5
6
Hello,医院!
我是白衣狼,医院质管办新人
医生:李医生
科室:骨科
工龄:15年
李医生是骨科的医生,工号 D001,工龄 15 年

3.3 例子 2:统计本月错误数(列表与循环)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*-
# 列表(list):存多个数据
本月错误数 = [5, 8, 12, 3, 7, 9, 6] # 一周 7 天的错误数

# 循环(for):对列表每个元素做同样操作
print("本周每日错误数:")
for i, 错误数 in enumerate(本月错误数, 1):
print(f" 第{i}天:{错误数}条")

# 求和
总错误数 = sum(本月错误数)
print(f"\n本周总错误数:{总错误数}条")
print(f"日均错误数:{总错误数 / len(本月错误数):.1f}条")

# 求最大、最小
print(f"单日最多:{max(本月错误数)}条")
print(f"单日最少:{min(本月错误数)}条")

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
本周每日错误数:
第1天:5条
第2天:8条
第3天:12条
第4天:3条
第5天:7条
第6天:9条
第7天:6条

本周总错误数:50条
日均错误数:7.1条
单日最多:12条
单日最少:3条

3.4 例子 3:找出 Top 3 错误类型(字典与排序)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# -*- coding: utf-8 -*-
# 字典(dict):存「键-值」对
错误类型统计 = {
"主诊未选主要诊断": 45,
"主诊ICD与性别不符": 18,
"手术ICD与操作不符": 8,
"其他": 4
}

# 按错误数排序(从大到小)
排序后的错误类型 = sorted(
错误类型统计.items(),
key=lambda x: x[1], # 按值排序
reverse=True # 倒序
)

print("Top 错误类型:")
for 类型, 数量 in 排序后的错误类型:
print(f" {类型}:{数量}条")

# 计算百分比
总错误数 = sum(错误类型统计.values())
print(f"\n错误类型占比:")
for 类型, 数量 in 排序后的错误类型:
占比 = 数量 / 总错误数 * 100
print(f" {类型}:{数量}条({占比:.1f}%)")

运行结果:

1
2
3
4
5
6
7
8
9
10
11
Top 错误类型:
主诊未选主要诊断:45条
主诊ICD与性别不符:18条
手术ICD与操作不符:8条
其他:4条

错误类型占比:
主诊未选主要诊断:45条(60.0%)
主诊ICD与性别不符:18条(24.0%)
手术ICD与操作不符:8条(10.7%)
其他:4条(5.3%)

3.5 例子 4:主诊错误自动判定(if/elif/else)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
# 条件判断(if/elif/else)
错误分值 = int(input("请输入错误分值(0-100):"))

if 错误分值 >= 80:
等级 = "重大错误"
处理方式 = "立即整改 + 责任到人"
elif 错误分值 >= 50:
等级 = "严重错误"
处理方式 = "一周内整改 + 原因分析"
elif 错误分值 >= 20:
等级 = "一般错误"
处理方式 = "两周内整改 + 培训"
else:
等级 = "轻微错误"
处理方式 = "备注 + 月度汇总"

print(f"\n错误等级:{等级}")
print(f"处理方式:{处理方式}")

3.6 例子 5:把首页错误清单写入文件(读写 Excel)

[!tip] 先安装 pandas 和 openpyxl
打开命令行,输入:

1
pip install pandas openpyxl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding: utf-8 -*-
import pandas as pd

# 用字典创建 DataFrame(类似 Excel 表格)
首页错误清单 = pd.DataFrame({
'病案号': ['BA001', 'BA002', 'BA003', 'BA004', 'BA005'],
'科室': ['骨科', '骨科', '神经科', '消化科', '骨科'],
'责任医生': ['李医生', '张医生', '王医生', '陈医生', '李医生'],
'错误类型': ['主诊未选主要诊断', 'ICD与性别不符', '主诊未选主要诊断', '手术ICD错误', '主诊未选主要诊断'],
'错误分值': [85, 65, 90, 45, 75]
})

# 显示前 3 行
print("前 3 行:")
print(首页错误清单.head(3))

# 统计:每个责任医生的错误数
print("\n责任医生错误数:")
错误统计 = 首页错误清单.groupby('责任医生').size().sort_values(ascending=False)
print(错误统计)

# 保存到 Excel
首页错误清单.to_excel('本月错误清单.xlsx', index=False)
print("\n✓ 已保存到 本月错误清单.xlsx")

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
前 3 行:
病案号 科室 责任医生 错误类型 错误分值
0 BA001 骨科 李医生 主诊未选主要诊断 85
1 BA002 骨科 张医生 ICD与性别不符 65
2 BA003 神经科 王医生 主诊未选主要诊断 90

责任医生错误数:
责任医生
李医生 2
张医生 1
王医生 1
陈医生 1
dtype: int64

✓ 已保存到 本月错误清单.xlsx

四、避坑指南:5 个让新手”踩雷”的常见错误

[!warning] 雷区 ①:中英文符号混用
症状:print("你好") 报错,提示「SyntaxError」。
原因:中文括号 ( 和英文 ( 长得像,但 Python 只认英文符号。
解决:写代码时关闭中文输入法,或者用编辑器提示。

[!warning] 雷区 ②:缩进错误
症状:IndentationError: unexpected indent
原因:Python 用**缩进(4 个空格)**表示代码块,缩进错就乱套。
解决:用 Tab 或 4 个空格,统一规则,不要混用。

[!warning] 雷区 ③:变量名用中文
症状:虽然 Python 3 支持中文变量名,但强烈不推荐
原因:搜索/替换/团队协作时中文变量名极易出错。
解决:用拼音或英文:gong_haodoctor_name

[!warning] 雷区 ④:忘记 pip install 第三方库
症状:ModuleNotFoundError: No module named 'pandas'
原因:Python 自带的库不多,pandas、matplotlib 都要手动装。
解决:运行前先 pip install pandas matplotlib openpyxl

[!warning] 雷区 ⑤:文件路径用反斜杠 \ 写错
**症状**:FileNotFoundError
**原因**:Windows 路径分隔符是 \,但 Python 字符串里 \ 是转义符。
**解决**:**用正斜杠 /** 或 **原始字符串 r"D:\data"**,或双反斜杠 \\

1
2
3
4
5
6
7
# ❌ 错误
df = pd.read_excel("D:\data\首页.xlsx")

# ✅ 正确(三种写法)
df = pd.read_excel("D:/data/首页.xlsx")
df = pd.read_excel(r"D:\data\首页.xlsx")
df = pd.read_excel("D:\\data\\首页.xlsx")

五、下期预告

[!quote] 第 15 期
pandas 入门:首页数据的「Excel 终结者」—— DataFrame 10 大操作

这一期,带你深入 pandas,把第 14 期的 5 个例子升级为「真实的首页数据处理脚本」,实现 Excel 做不到的 10 大操作。


[!TIP] 互动
如果你觉得这篇「医数智联·第 14 期」对你有用,请点赞、在看、转发给科里的同事。

我是白衣狼,一个用数字化工具把医院管理做「轻」的实战派。咱们下期见。