找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4429

积分

0

好友

612

主题
发表于 2 小时前 | 查看: 2| 回复: 0

前面我们学习了通过 pandas 来处理并格式化输出 Excel 的基本方法。今天,我们将通过一个具体的实例,深入探讨如何利用其 style 功能,实现类似 Excel 中“条件格式”的效果,让数据根据特定规则高亮显示。

想象一下这个场景:在月度费用报表中,我们希望一眼就能看出哪些部门超支,哪些部门节约。需求很明确:将超支的金额标红,节约的金额标绿,同时,超支比例的不同等级也用颜色加以区分。

话不多说,我们直接通过代码来实现。

一、准备基础数据

首先,我们使用 pandas 创建一个模拟的数据集。

import pandas as pd

# 创建示例数据
data = {
    '部门': ['研发部', '市场部', '财务部', '人事部', '运营部'],
    '预算': [50000, 30000, 20000, 15000, 25000],
    '实际支出': [55000, 28000, 22000, 14000, 30000],
    '差额': [5000, -2000, 2000, -1000, 5000],
    '超支比例': [0.10, -0.07, 0.10, -0.07, 0.20]
}
df = pd.DataFrame(data)

这段代码创建了一个包含部门预算、实际支出、差额和超支比例的 DataFrame。当然,你也可以先从 Excel 文件读取数据,处理逻辑是相同的。我们的核心目标,就是对 df 这个数据集进行可视化样式渲染。

二、定义样式函数

pandas 的样式功能允许我们定义函数来为单元格应用 CSS 样式。这里我们需要两个函数,分别处理“差额”和“超支比例”列。

1. 高亮显示差额

这个函数判断“差额”的正负,为正(超支)则应用红色背景和文字,为负(节约)则应用绿色样式。

# 定义差额颜色样式
def highlight_diff(val):
    if val > 0:
        return 'background-color: #ffcccc; color: red; font-weight: bold'
    elif val < 0:
        return 'background-color: #ccffcc; color: green; font-weight: bold'
    return ''

2. 高亮显示超支比例

这个函数根据超支比例的大小,返回不同的文字颜色。比例超过10%用红色粗体,0-10%之间用橙色,节约(比例为负)则用绿色。

# 定义超支比例样式
def highlight_ratio(val):
    if val > 0.1:
        return 'color: red; font-weight: bold'
    elif val > 0:
        return 'color: orange'
    else:
        return 'color: green'

这两个函数就是我们的样式规则“引擎”,它们会返回符合 CSS 语法的字符串。

三、应用样式并导出Excel

接下来,我们使用 DataFrame.style 属性,将上面定义的函数应用到对应的列,并进行一些额外的表格美化,最后导出为 Excel 文件。

# 应用样式
styled_df = df.style \
    .applymap(highlight_diff, subset=['差额']) \
    .applymap(highlight_ratio, subset=['超支比例']) \
    .format({
        '预算': '¥{:,.0f}',
        '实际支出': '¥{:,.0f}',
        '差额': '¥{:,.0f}',
        '超支比例': '{:.2%}'
    }) \
    .set_table_styles([
        {'selector': 'th', 'props': [
            ('background-color', '#4a90e2'),
            ('color', 'white'),
            ('font-weight', 'bold'),
            ('padding', '8px'),
            ('text-align', 'center')
        ]},
        {'selector': 'td', 'props': [
            ('padding', '6px'),
            ('border', '1px solid #ddd')
        ]}
    ]) \
    .set_caption('部门费用报表 - 超支分析')

# 保存为Excel
styled_df.to_excel('费用报表_格式化.xlsx',
             engine='openpyxl', index=False)
print("格式化完成!文件已保存为:费用报表_格式化.xlsx")

这段代码做了以下几件事:

  1. .applymap(): 将样式函数映射到指定的列(subset 参数)。
  2. .format(): 设置数字的显示格式,例如为金额添加货币符号,将比例转换为百分比。
  3. .set_table_styles(): 设置整个表格的 CSS 样式,如表头背景色、单元格内边距和边框。
  4. .to_excel(): 将带有样式的 DataFrame 保存为 Excel 文件。注意,需要指定 engine='openpyxl' 来支持样式写入。

最终效果预览

  • 差额列:超支的单元格显示为红色背景,节约的显示为绿色背景。
  • 超支比例列:比例 > 10% 显示为红色粗体,0-10% 显示为橙色,节约的显示为绿色。
  • 整体表格:拥有美观的表头和清晰的单元格边框。

方老师卡通形象

四、总结:Pandas样式应用三步法

这是 pandasstyle 组件一个非常实用的场景——高亮显示需要重点标注的数据

你可以将整个流程总结为 “三步走”

  1. 定义格式函数 —— 使用 if/else 逻辑判断,返回对应的 CSS 样式字符串。
  2. 调用格式函数 —— 使用 df.style.applymap() 方法,将函数应用到目标列或整个数据框。
  3. 美化表格(可选) —— 使用 .set_table_styles().format() 等方法,进一步优化表格的显示效果。

掌握这个方法,你就能轻松实现各种基于条件的表格可视化,让生成的 Excel 报告更加专业、直观。pandasPandas 数据处理能力结合其样式功能,在 Python 自动化办公中潜力巨大。

Python数据分析主题插画

方老师说
这个方法你掌握了吗?试着改造一下你手头的数据报告吧。如果在实践过程中遇到任何问题,或者有更酷的样式想法,都欢迎在 云栈社区 的技术板块进行交流探讨。

方老师卡通形象




上一篇:AI Agent稳定性问题:从提示词工程到上下文工程的实践反思
下一篇:C语言指针:深度解析虚拟地址与物理地址的底层原理与程序运行环境
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-18 07:54 , Processed in 0.698034 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表