(超简单)Python pandas数据写入同一个EXCEL中的多个sheet

如果要对同一个excel 写入多个sheet 的话,普通叠加的方式会覆盖之前写入的sheet.
所以这里提出了一种简单的读写方式。

注意, 这里需要提前安装openpyxl 库, 但是不需要在代码中import 这个库

import pandas as pd
df1 = pd.DataFrame({
   
   'a':[3,1],'b':[4,
<think>我们使用pandasExcelWriter来写入多个sheet。基本步骤是: 1. 创建一个ExcelWriter对象(通常使用`pd.ExcelWriter`)。 2. 将每个DataFrame写入不同的sheet,通过指定sheet_name。 3. 保存Excel文件。 注意:为了避免覆盖已有的sheet,我们需要在同一个ExcelWriter对象中写入所有需要保存的sheet,然后保存。 示例代码: ```python import pandas as pd # 创建两个DataFrame示例 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]}) # 使用ExcelWriter with pd.ExcelWriter('output.xlsx') as writer: df1.to_excel(writer, sheet_name='Sheet1', index=False) df2.to_excel(writer, sheet_name='Sheet2', index=False) ``` 这样就会在同一个Excel文件(output.xlsx)中创建两个sheetSheet1和Sheet2。 如果需要追加到已有的Excel文件中(即该文件已存在,我们不想覆盖原有数据,而是添加新的sheet),则需要注意: - 如果直接使用上面的方法,会覆盖整个文件。为了追加sheet,我们需要使用`mode='a'`参数(追加模式)。但是,在pandas中,追加模式需要配合`if_sheet_exists`参数(对于新版本pandas)以及使用`engine='openpyxl'`(因为xlwt不支持追加)。 追加示例(仅当文件存在时,追加新的sheet,不会覆盖原有sheet): ```python # 如果文件已存在,我们想追加sheet,使用openpyxl引擎 with pd.ExcelWriter('output.xlsx', mode='a', engine='openpyxl') as writer: df2.to_excel(writer, sheet_name='Sheet3', index=False) ``` 注意:如果追加的sheet名称已经存在,则会覆盖同名的sheet(除非设置`if_sheet_exists`参数,例如设置为'new'来避免覆盖,但具体行为取决于pandas版本)。因此,在追加时,确保sheet名称唯一。 另外,如果文件不存在,使用追加模式会报错。所以,通常的做法是:如果文件不存在,则用写入模式(默认);如果文件存在,则用追加模式。但这样需要先判断文件是否存在。我们可以封装一下: ```python import os file_path = 'output.xlsx' if os.path.exists(file_path): mode = 'a' else: mode = 'w' # 注意:在追加模式('a')下,必须指定engine='openpyxl' with pd.ExcelWriter(file_path, mode=mode, engine='openpyxl' if mode=='a' else None) as writer: # 写入df1到Sheet1,如果mode='a',则要确保sheet_name不重复 df1.to_excel(writer, sheet_name='Sheet1', index=False) # 如果追加模式,可以继续写入其他sheet # 但注意:如果写入sheet_name已经存在,则会覆盖该sheet ``` 但是,上面的代码在写入第一个sheetSheet1)时,如果文件已存在且已经有一个Sheet1,那么它会被覆盖。为了避免覆盖已有的sheet,我们可以使用不同的sheet名称,或者先读取已有的sheet,然后重新写入整个文件(这需要将所有已有的sheet和新的sheet一起写入)。 因此,如果我们需要保留原有sheet并添加新sheet,且原有sheet名称可能和新sheet名称冲突,那么更安全的做法是: 1. 读取原有Excel文件中的所有sheet到字典(DataFrame的字典)。 2. 将新的DataFrame添加到这个字典中(注意避免名称冲突)。 3. 然后将整个字典写入新的Excel文件(覆盖原文件)。 示例: ```python # 读取已有的所有sheet file_path = 'output.xlsx' if os.path.exists(file_path): # 读取所有sheet existing_sheets = pd.read_excel(file_path, sheet_name=None) # 将新的df添加到字典中(假设我们有一个新的df3要添加,且sheet名为'Sheet3') # 注意:如果已有'Sheet3',则覆盖,否则添加 existing_sheets['Sheet3'] = df3 # 这里df3是新的DataFrame # 重新写入整个文件 with pd.ExcelWriter(file_path) as writer: for sheet_name, df in existing_sheets.items(): df.to_excel(writer, sheet_name=sheet_name, index=False) else: # 文件不存在,则直接写入 with pd.ExcelWriter(file_path) as writer: df3.to_excel(writer, sheet_name='Sheet3', index=False) ``` 但是,这种方法在数据量大时可能会占用较多内存,因为需要将整个Excel文件读入内存。 因此,根据需求选择合适的方法。如果只是添加少量新sheet且不涉及已有sheet的修改,使用追加模式(注意避免重名)即可。 总结: - 写入多个sheet:使用`ExcelWriter`上下文管理器,依次写入每个DataFrame并指定不同的sheet_name。 - 追加到已有文件:使用追加模式(`mode='a'`)和`engine='openpyxl'`,注意避免sheet名称重复(否则会覆盖)。 - 安全地追加且避免覆盖已有sheet:先读取整个文件,合并所有sheet(包括新sheet),再整体写入。 根据实际场景选择。</think>在 Python 中,使用 pandas数据写入 Excel 文件的多个工作表,需要通过 `ExcelWriter` 对象实现。以下是详细步骤和示例: ### 解决方案 1. **创建 ExcelWriter 对象** 使用 `pd.ExcelWriter()` 创建写入器对象,指定文件名和引擎(如 `openpyxl`)。 2. **逐个写入工作表** 对每个 DataFrame 调用 `to_excel()` 方法,通过 `sheet_name` 参数指定工作表名称。 3. **保存文件** 使用上下文管理器(`with` 语句)自动保存并关闭文件。 ### 完整代码示例 ```python import pandas as pd # 示例数据 data1 = {"姓名": ["张三", "李四"], "成绩": [85, 92]} data2 = {"产品": ["A", "B"], "销量": [120, 89]} df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) # 写入多个工作表 with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer: df1.to_excel(writer, sheet_name="学生成绩", index=False) df2.to_excel(writer, sheet_name="销售数据", index=False) ``` ### 关键参数说明 - **`engine='openpyxl'`** 必需参数,用于支持多工作表操作(`.xlsx` 格式)。 - **`sheet_name`** 自定义工作表名称(默认 `Sheet1`)。 - **`index=False`** 禁止写入行索引(推荐)。 - **`startrow/startcol`** 控制数据起始位置(如 `startrow=2` 从第3行开始写入)。 ### 追加到现有文件 ```python # 追加新工作表到已存在的Excel文件 with pd.ExcelWriter("output.xlsx", mode="a", engine="openpyxl") as writer: pd.DataFrame({"部门": ["财务", "技术"]}).to_excel( writer, sheet_name="部门信息", index=False ) ``` ### 注意事项 1. **文件路径** 路径需包含扩展名(如 `output.xlsx`)。 2. **引擎依赖** 需安装 `openpyxl`:`pip install openpyxl`。 3. **工作表重名** 追加模式(`mode='a'`)下,同名工作表会被覆盖。 4. **大数据量** 过百万行时考虑分文件存储或使用 `xlsxwriter` 引擎优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值