当前位置:  首页>> 技术小册>> python与ChatGPT让excel高效办公(下)

案例02 批量新建并保存多个工作簿

引言

在日常办公和数据处理中,经常需要处理大量数据并分别保存在不同的Excel工作簿中。手动逐一创建并保存这些工作簿不仅效率低下,还容易出错。幸运的是,Python结合其强大的库,如pandasopenpyxl,可以自动化这一过程,极大地提高工作效率。本章节将详细介绍如何使用Python和ChatGPT(虽然ChatGPT本身不直接执行代码,但我们可以利用其自然语言理解能力来辅助规划或解释代码逻辑)来批量新建并保存多个Excel工作簿。

环境准备

在开始之前,请确保你的Python环境已经安装了以下库:

  • pandas:用于数据处理。
  • openpyxl:用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。

如果未安装,可以通过pip安装它们:

  1. pip install pandas openpyxl

思路分析

要实现批量新建并保存多个工作簿,我们首先需要确定以下几个关键点:

  1. 数据源:从哪里获取数据?是单个大数据集需要分割,还是多个独立的数据集?
  2. 分割逻辑:如何决定每个工作簿的内容?基于行数、列数、特定条件等。
  3. 文件命名:如何为每个工作簿命名?
  4. 循环执行:如何编写循环来自动化这个过程。

示例实现

假设我们有一个包含员工信息的CSV文件,每个部门的数据需要保存在一个单独的工作簿中。CSV文件结构如下:

  1. 姓名,部门,职位,年龄
  2. 张三,销售,经理,30
  3. 李四,技术,工程师,28
  4. 王五,销售,销售代表,25
  5. 赵六,人力资源,招聘专员,27
步骤1:读取数据

首先,使用pandas读取CSV文件。

  1. import pandas as pd
  2. # 读取CSV文件
  3. data = pd.read_csv('employees.csv')
步骤2:按部门分割数据

然后,我们根据“部门”列将数据分割成多个DataFrame。

  1. # 按部门分组
  2. grouped = data.groupby('部门')
步骤3:创建并保存工作簿

接下来,我们遍历分组后的数据,为每个部门创建一个新的Excel工作簿并保存。

  1. from openpyxl import Workbook
  2. # 遍历每个部门
  3. for department, dept_data in grouped:
  4. # 创建一个新的工作簿
  5. wb = Workbook()
  6. ws = wb.active
  7. ws.title = '员工信息'
  8. # 将DataFrame写入工作表
  9. for r in dataframe_to_rows(dept_data, index=False, header=True):
  10. ws.append(r)
  11. # 保存工作簿
  12. filename = f"{department}_员工信息.xlsx"
  13. wb.save(filename)
  14. print(f"已保存 {filename}")
  15. # 辅助函数,将DataFrame转换为适合写入Excel的行列表
  16. def dataframe_to_rows(df, index=True, header=True):
  17. columns = list(df.columns)
  18. if header:
  19. yield [column for column in columns]
  20. for index, series in df.iterrows():
  21. yield [series[column] for column in columns]

注意:在实际应用中,dataframe_to_rows函数可能不是最高效的写入方式,特别是对于大型数据集。这里为了展示过程,我们使用了简单直观的方法。对于大规模数据,推荐使用pandasExcelWriter类。

使用pandasExcelWriter优化写入

为了提高效率,特别是当处理大型数据集时,我们可以使用pandasExcelWriter来一次性写入多个工作表到同一个Excel文件(尽管这里我们想要的是多个文件,但了解这一点对于处理更复杂情况很有帮助)。对于本例,我们仍然分别保存每个工作簿,但可以借鉴其高效写入数据的方法。

  1. with pd.ExcelWriter('temp_workbook.xlsx', engine='openpyxl') as writer: # 注意:这里仅为示例说明
  2. for department, dept_data in grouped:
  3. dept_data.to_excel(writer, sheet_name=department, index=False)
  4. # 注意:这里并不真正保存每个部门为一个独立文件,而是展示了如何使用ExcelWriter
  5. # 但为了分别保存,我们仍使用之前的循环和保存逻辑

注意事项

  • 在处理大型数据集时,注意内存使用情况,避免一次性加载所有数据到内存中。
  • 确保文件命名不会发生冲突,尤其是在批量生成时。
  • 根据实际需求调整工作簿的保存路径和文件名格式。
  • 考虑到数据的敏感性和隐私性,在保存文件时要确保遵守相关的数据保护法规。

结语

通过本案例,我们学习了如何使用Python和pandasopenpyxl库来批量新建并保存多个Excel工作簿。这种方法极大地提高了数据处理的自动化程度,使得从数据准备到报告生成的整个过程更加高效和准确。希望读者能够掌握这一技能,并在实际工作中灵活运用,提升工作效率。