styler.applymap用于单单元格条件着色,仅依赖当前值;apply适用于需行列上下文的逻辑;where通过布尔掩码批量着色;导出html时需注意内联样式兼容性,excel导出需用to_excel单独配置。

用 Styler.applymap 对单个单元格做条件高亮
直接对每个单元格单独判断并着色,适合规则简单、只依赖当前单元格值的场景。比如把所有负数标红:
df.style.applymap(lambda x: 'color: red' if x <p>注意:<code>applymap</code> 已在 Pandas 2.1+ 中被标记为弃用,但目前仍可用;新代码建议优先用 <code>applymap</code> 的替代写法——<code>map</code>(仅限单列/单 Series),或改用 <code>apply</code> + <code>axis=None</code>。</p>
- 不能访问同行/同列其他值,逻辑受限
- 返回值必须是 CSS 字符串,空字符串表示不覆盖默认样式
- 如果返回非字符串(如
None),会抛出TypeError: expected str instance, NoneType found
用 Styler.apply 基于行或列做条件高亮
当高亮逻辑需要整行/整列上下文时(例如“最大值加粗”“某列大于均值标黄”),必须用 apply。它传入的是 Series(axis=0)或 DataFrame(axis=1 或 axis=None):
df.style.apply(lambda s: ['background-color: yellow' if v > s.mean() else '' for v in s], axis=0)
这段代码对每列分别计算均值,再给该列中超过均值的单元格加背景色。
-
axis=0:按列处理,函数接收每列的Series -
axis=1:按行处理,函数接收每行的Series -
axis=None:整个 DataFrame 当作一个Series(展平后),适合全局阈值判断 - 返回值必须是与输入等长的字符串列表,顺序不能错,否则样式错位
用 Styler.where 实现布尔掩码式高亮
这是最接近“条件筛选+批量着色”的方式,语义清晰、不易出错。先构造布尔 DataFrame,再统一应用样式:
df.style.where(df > 0, 'background-color: lightgreen')
上面这行会让所有正值单元格变浅绿色,其余保持原样。
-
where第一个参数是布尔型DataFrame或Series,True位置应用样式 - 第二个参数是 CSS 样式字符串,支持多个属性,例如
'color: blue; font-weight: bold' - 可链式调用多次
where实现多条件叠加,但注意后调用的会覆盖前调用的同名属性(如都设了background-color) - 不支持动态计算(比如“每行最大值”需先用
df.eq(df.max(axis=1), axis=0)构造掩码)
导出带样式的 HTML 时样式丢失怎么办
Styler 对象的 to_html() 默认只输出内联 style,但某些环境(如 Jupyter Lab 的旧版本、邮件客户端、部分 CMS)会过滤或忽略 style 属性。
- 用
df.style.to_html(table_styles=[{'selector': 'td', 'props': [('font-family', 'monospace')]}])显式注入 table_styles - 若需完整 CSS 类支持,加
uuid参数避免样式冲突:df.style.set_uuid('mytable'),再配合set_table_styles - 生成静态 HTML 后务必用浏览器打开验证,不要只信 Jupyter Notebook 的预览效果
- 导出 Excel 不保留 CSS 样式,
Styler的to_excel是另一套机制(基于 openpyxl),需单独配置
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











