python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel数据分组

Python操作Excel数据分组的完整指南

作者:Eiceblue

在日常数据处理工作中,Excel 数据分组是一项高频使用的功能,本文将系统介绍使用 Python代 码实现 Excel 数据分组的方法并提供完整代码示例,希望对大家有所帮助

在日常数据处理工作中,Excel 数据分组是一项高频使用的功能。当面对包含大量明细数据的表格时,仅靠原始数据视图往往难以快速把握整体结构和汇总信息。Excel 的分组功能允许用户将相邻的行或列组织为可折叠/展开的层级结构,从而在宏观汇总与微观明细之间灵活切换。典型的应用场景包括:

无论是业务人员直接在 Excel 中手动操作,还是开发者通过代码批量处理,掌握数据分组功能背后的实现逻辑都至关重要。本文将系统介绍使用 Python代 码实现 Excel 数据分组的方法,提供完整代码示例。

一、Excel 内置数据分组功能

1.1 行分组与列分组

在 Excel 中,数据分组主要通过 “数据” 选项卡下的 “组合” 功能完成。用户可以选中连续的行或列,点击“分组”按钮后,Excel 会在行号左侧或列标上方自动生成 “—” 形状的控制按钮,单击该按钮即可折叠或展开分组区域。反向操作选择 “取消组合”,即可解除分组状态。

1.2 分类汇总

分类汇总是 Excel 中一个更高级的数据分组功能。当用户需要对某一列的数据按特定字段进行分组汇总时,可以通过“数据”→“分类汇总”菜单进入设置界面。在该界面中,用户需要指定:

Excel 自动为每个分组插入汇总行,并生成可折叠的数据层次结构。

1.3 不足之处

Excel 手动操作的局限在于缺乏自动化能力。当需要频繁生成分组报表,或需要将分组功能嵌入数据处理流程时,手动操作显然不能满足要求。这便是 Python 的价值所在。

二、Python 实现 Excel 数据分组

Free Spire.XLS for Python 是一个专门用于操作 Excel 文件的免费 Python 库,通过pip命令即可完成安装:

pip install Spire.XLS.Free

在数据分组功能方面,该库提供了以下核心能力:

下文将逐一详细介绍这些功能的代码实现。

三、使用 Free Spire.XLS 创建基础行分组

最基础的分组操作是将指定连续区域的行或列分组。Worksheet 类提供了 GroupByRows()GroupByColumns() 方法来实现这一功能。

以下示例演示如何加载一个 Excel 文件,并对其中某个连续行区域进行分组:

from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象
workbook = Workbook()
# 加载Excel文件
workbook.LoadFromFile("数据.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 对第2到第10行进行分组,False表示不折叠(即默认展开状态)
sheet.GroupByRows(2, 10, False)

# 保存结果文件
workbook.SaveToFile("行分组结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

GroupByRows() 方法的三个参数依次为:起始行索引、结束行索引、是否折叠分组。当第三个参数为True时,分组在打开时即处于折叠状态,所有明细行被隐藏,仅显示分组摘要行。

如需对列进行分组,可调用 GroupByColumns() 方法:

# 对第4到第7列进行分组
sheet.GroupByColumns(4, 7, False)

上述代码运行后,在生成的 Excel 文件中,行号左侧或列标上方会出现分组控制按钮,用户可以手动展开或折叠分组区域。

四、创建嵌套分组

在实际业务场景中,数据往往具有多层次结构。这种嵌套分组可以通过多次调用GroupByRows()方法实现:先创建外层分组,再在外层分组内创建内层分组。

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("数据.xlsx")
sheet = workbook.Worksheets[0]

# 创建外层分组:第2到第10行(
sheet.GroupByRows(2, 10, False)

# 在外层分组内部创建嵌套分组(第3到第7行)
sheet.GroupByRows(3, 7, False)

workbook.SaveToFile("嵌套分组.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行上述代码后,Excel 文件中将出现内外层两级分组控制按钮。这种结构化的数据组织方式极大地提升了数据查看和报告的交互性。

五、创建分类汇总

分类汇总(Subtotal)是比单纯行分组更高级的功能,它不仅自动生成分组结构,还在每个分组后插入汇总行,并根据指定的汇总方式计算数值。Worksheet.Subtotal()方法正是为此设计的。

假设有如下图所示的销售数据表格(示例数据结构):

行号地区销售人员销售额订单数量
1华东张三1250015
2华东李四980012
3华南王五1570018
4华南赵六1120014

按“地区”字段进行分组并对“销售额”求和,是典型的分类汇总需求。实现代码如下:

from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象并加载Excel文件(假设该文件包含上述示例数据)
workbook = Workbook()
workbook.LoadFromFile("销售明细.xlsx")
sheet = workbook.Worksheets[0]

# 定义需要进行分类汇总的数据区域
# 区域为 A2 到 D5(仅数据行)
data_range = sheet.Range["A2:D5"]

# 调用完整参数的 Subtotal 方法
# 参数说明:
#   data_range        : 要处理的单元格区域,本例为 A1:D5
#   groupByIndex      : 分组列在区域内的索引(0-based),1 表示区域内的第2列(B列,即“地区”列)
#   totalFields       : 需要汇总的列索引列表(0-based),[3] 表示区域内的第4列(D列,即“销售额”列)
#   subtotalType      : 汇总类型,SubtotalTypes.Sum 表示求和
#   replace           : 是否替换现有的分类汇总,True 表示替换
#   addPageBreak      : 是否在每组后添加分页符,False 表示不添加
#   addsummaryBelowData : 是否将汇总行显示在数据下方,True 表示汇总行位于明细数据下方
sheet.Subtotal(data_range, 1, [3], SubtotalTypes.Sum, True, False, True)

workbook.SaveToFile("分类汇总结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行结果说明:

运行上述代码后,生成的 Excel 文件中的表格将被转换为以下结构:

六、取消分组

当需要移除现有分组时,可使用 UngroupByRows()UngroupByColumns() 方法:

from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("已分组文件.xlsx")
sheet = workbook.Worksheets[0]

# 取消第2到第10行的分组
sheet.UngroupByRows(2, 10)
# 取消第2到第4列的分组
sheet.UngroupByColumns(2, 4)

workbook.SaveToFile("取消分组后.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

UngroupByRows() 的参数只需指定起始行和结束行,方法会移除该范围内的所有分组,恢复到未分组状态。

小结

本文系统介绍了在 Python 中实现 Excel 数据分组功能的方法。通过 GroupByRows()GroupByColumns()Subtotal() 等方法,开发者可以以纯代码的方式完成行分组、列分组、嵌套分组以及分类汇总等常见数据处理任务,生成可直接交付使用的带有分组结构的 Excel 报表。

到此这篇关于Python操作Excel数据分组的完整指南的文章就介绍到这了,更多相关Python Excel数据分组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文