下面我来详细讲解如何用Python实现Excel自动分组合并单元格的完整实例教程。
步骤一:安装相关依赖包
在Python中实现Excel自动分组合并单元格,需要使用pandas
和openpyxl
两个库。在命令行中输入以下命令进行安装:
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表格举例子。现在我们想要将每个省份的数据导入到不同的数据库中。由于同一个省份的数据字段是一样的,这时候我们就可以批量执行相应的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的分组合并单元格操作,并且应用到实际工作中。