Python实现Excel自动分组合并单元格

  • Post category:Python

下面我来详细讲解如何用Python实现Excel自动分组合并单元格的完整实例教程。

步骤一:安装相关依赖包

在Python中实现Excel自动分组合并单元格,需要使用pandasopenpyxl两个库。在命令行中输入以下命令进行安装:

pip install pandas openpyxl

步骤二:处理Excel数据

我们有以下这个Excel表格:

姓名 性别 年龄
张三 18
李四 19
张三 20
王五 22
李四 21
王五 23

我们想要根据“姓名”和“性别”进行分组,计算各组的平均年龄并合并单元格。

首先,用pandas库读取Excel表格:

import pandas as pd

df = pd.read_excel('test.xlsx')

接着,使用groupby函数按照“姓名”和“性别”进行分组,并计算各组的平均年龄:

grouped = df.groupby(['姓名', '性别'])['年龄'].mean()

最后,将结果写入Excel表格,并合并单元格:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

# 写入表头
ws['A1'] = '姓名'
ws['B1'] = '性别'
ws['C1'] = '平均年龄'

# 写入数据
for i, index in enumerate(grouped.index):
    ws.cell(row=i+2, column=1, value=index[0])
    ws.cell(row=i+2, column=2, value=index[1])
    ws.cell(row=i+2, column=3, value=grouped[index])

# 合并单元格
for i in range(2, len(grouped)+2):
    ws.merge_cells(f'A{i}:A{i+1}')
    ws.merge_cells(f'B{i}:B{i+1}')

完成以上操作后,可以得到以下Excel表格:

姓名 性别 平均年龄
张三 19
李四 20
王五 22.5

这里是一个完整的示例程序,供参考:

import pandas as pd
from openpyxl import Workbook

# 读取Excel表格
df = pd.read_excel('test.xlsx')

# 按照“姓名”和“性别”进行分组,计算各组平均年龄
grouped = df.groupby(['姓名', '性别'])['年龄'].mean()

# 写入Excel表格
wb = Workbook()
ws = wb.active

# 写入表头
ws['A1'] = '姓名'
ws['B1'] = '性别'
ws['C1'] = '平均年龄'

# 写入数据
for i, index in enumerate(grouped.index):
    ws.cell(row=i+2, column=1, value=index[0])
    ws.cell(row=i+2, column=2, value=index[1])
    ws.cell(row=i+2, column=3, value=grouped[index])

# 合并单元格
for i in range(2, len(grouped)+2):
    ws.merge_cells(f'A{i}:A{i+1}')
    ws.merge_cells(f'B{i}:B{i+1}')

# 保存Excel表格
wb.save('output.xlsx')

示例说明

示例一

作为数据分析师,我们会经常处理各种Excel报表。有时需要对某些表格中重要数据进行标注、划背景,这时候,就需要自动合并单元格。比如,下表中需要将每个省份的数据单独进行标注,这时候我们可以使用Python程序自动进行分组合并:

省份 日期 数据1 数据2
广东 2022/09/01 20 34
广东 2022/09/02 25 28
广东 2022/09/03 30 32
江苏 2022/09/01 26 33
江苏 2022/09/02 22 30
江苏 2022/09/03 28 25
河北 2022/09/01 29 36
河北 2022/09/02 27 31
河北 2022/09/03 24 29

我们可以使用Python程序进行分组合并,代码如下:

import pandas as pd
from openpyxl import Workbook

# 读取Excel表格
df = pd.read_excel('test.xlsx')

# 按照“省份”进行分组
grouped = df.groupby('省份')

# 将每个省份的数据放入一个新的sheet中
wb = Workbook()
for group_name, group_data in grouped:
    ws = wb.create_sheet(group_name)

    # 写入表头
    for i, col_name in enumerate(group_data.columns):
        ws.cell(row=1, column=i+1, value=col_name)

    # 写入数据
    for i, row_data in group_data.iterrows():
        for j, cell_data in enumerate(row_data):
            ws.cell(row=i+2, column=j+1, value=cell_data)

    # 合并单元格
    for i in range(2, len(group_data)+2):
        ws.merge_cells(f'A{i}:A{i+2}')

# 删除默认sheet
del wb['Sheet']

# 保存Excel表格
wb.save('output.xlsx')

运行以上代码后,可以得到以下结果:

Excel自动分组合并单元格结果

示例二

还是拿刚才的Excel表格举例子。现在我们想要将每个省份的数据导入到不同的数据库中。由于同一个省份的数据字段是一样的,这时候我们就可以批量执行相应的SQL语句进行插入,但是首先我们需要将数据按照省份进行分组再执行操作。这时候,Python程序可以帮助我们自动完成这个过程:

import pandas as pd

# 读取Excel表格
df = pd.read_excel('test.xlsx')

# 按照“省份”进行分组
grouped = df.groupby('省份')

# 遍历每个分组,执行相应的SQL语句
for group_name, group_data in grouped:
    # 格式化SQL语句
    sql = "INSERT INTO `{}` (`日期`, `数据1`, `数据2`) VALUES".format(group_name)
    for i, row_data in group_data.iterrows():
        date = row_data['日期']
        data1 = row_data['数据1']
        data2 = row_data['数据2']
        sql += " ('{}', {}, {}),".format(date, data1, data2)

    # 执行SQL语句
    cursor.execute(sql[:-1])

以上代码展示了如何利用Python程序将Excel数据分组后插入到数据库中。其中,cursor是数据库连接的游标对象,根据具体情况进行相应修改。

这两个示例展示了如何使用Python程序自动实现Excel的分组合并单元格操作,并且应用到实际工作中。