在日常办公和数据处理中,经常需要处理大量数据并分别保存在不同的Excel工作簿中。手动逐一创建并保存这些工作簿不仅效率低下,还容易出错。幸运的是,Python结合其强大的库,如pandas
和openpyxl
,可以自动化这一过程,极大地提高工作效率。本章节将详细介绍如何使用Python和ChatGPT(虽然ChatGPT本身不直接执行代码,但我们可以利用其自然语言理解能力来辅助规划或解释代码逻辑)来批量新建并保存多个Excel工作簿。
在开始之前,请确保你的Python环境已经安装了以下库:
pandas
:用于数据处理。openpyxl
:用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。如果未安装,可以通过pip安装它们:
pip install pandas openpyxl
要实现批量新建并保存多个工作簿,我们首先需要确定以下几个关键点:
假设我们有一个包含员工信息的CSV文件,每个部门的数据需要保存在一个单独的工作簿中。CSV文件结构如下:
姓名,部门,职位,年龄
张三,销售,经理,30
李四,技术,工程师,28
王五,销售,销售代表,25
赵六,人力资源,招聘专员,27
首先,使用pandas
读取CSV文件。
import pandas as pd
# 读取CSV文件
data = pd.read_csv('employees.csv')
然后,我们根据“部门”列将数据分割成多个DataFrame。
# 按部门分组
grouped = data.groupby('部门')
接下来,我们遍历分组后的数据,为每个部门创建一个新的Excel工作簿并保存。
from openpyxl import Workbook
# 遍历每个部门
for department, dept_data in grouped:
# 创建一个新的工作簿
wb = Workbook()
ws = wb.active
ws.title = '员工信息'
# 将DataFrame写入工作表
for r in dataframe_to_rows(dept_data, index=False, header=True):
ws.append(r)
# 保存工作簿
filename = f"{department}_员工信息.xlsx"
wb.save(filename)
print(f"已保存 {filename}")
# 辅助函数,将DataFrame转换为适合写入Excel的行列表
def dataframe_to_rows(df, index=True, header=True):
columns = list(df.columns)
if header:
yield [column for column in columns]
for index, series in df.iterrows():
yield [series[column] for column in columns]
注意:在实际应用中,dataframe_to_rows
函数可能不是最高效的写入方式,特别是对于大型数据集。这里为了展示过程,我们使用了简单直观的方法。对于大规模数据,推荐使用pandas
的ExcelWriter
类。
pandas
的ExcelWriter
优化写入为了提高效率,特别是当处理大型数据集时,我们可以使用pandas
的ExcelWriter
来一次性写入多个工作表到同一个Excel文件(尽管这里我们想要的是多个文件,但了解这一点对于处理更复杂情况很有帮助)。对于本例,我们仍然分别保存每个工作簿,但可以借鉴其高效写入数据的方法。
with pd.ExcelWriter('temp_workbook.xlsx', engine='openpyxl') as writer: # 注意:这里仅为示例说明
for department, dept_data in grouped:
dept_data.to_excel(writer, sheet_name=department, index=False)
# 注意:这里并不真正保存每个部门为一个独立文件,而是展示了如何使用ExcelWriter
# 但为了分别保存,我们仍使用之前的循环和保存逻辑
通过本案例,我们学习了如何使用Python和pandas
、openpyxl
库来批量新建并保存多个Excel工作簿。这种方法极大地提高了数据处理的自动化程度,使得从数据准备到报告生成的整个过程更加高效和准确。希望读者能够掌握这一技能,并在实际工作中灵活运用,提升工作效率。