You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Pandas将Excel多工作表追加合并为单个CSV文件?

问题原因与修改方案

你当前代码每次调用to_csv时默认使用写入模式('w'),会覆盖之前写入的内容,所以最终CSV里只剩最后一个工作表的数据。另外读取单个工作表时没必要用sheet_name=[f'{sheet_name}'],这种写法会返回字典,直接传入单个sheet名称字符串就能得到DataFrame,代码可以更简洁。

调整原代码实现追加逻辑

修改后的代码会在第一次写入时添加表头,后续工作表以追加模式写入且不重复写表头:

import pandas as pd

# 读取Excel文件对象
xls = pd.ExcelFile("Test1.xlsx")

# 标记是否为第一次写入(控制表头)
first_sheet = True

for sheet_name in xls.sheet_names:
    # 直接读取单个工作表,返回DataFrame
    df = pd.read_excel(xls, sheet_name=sheet_name, header=0, usecols=['Page', 'URL', 'Person'])
    print(df)
    # 第一次写入带表头,后续追加不带表头
    df.to_csv("emails.csv",
              index=False,
              header=first_sheet,
              mode='a',  # 追加模式,避免覆盖
              columns=['Page', 'URL', 'Person']
              )
    # 第一次写入完成后,更新标记
    first_sheet = False

更优实现方式:合并后一次性写入

这种方法先把所有工作表的数据合并成一个大的DataFrame,再一次性写入CSV,减少文件IO操作,代码更简洁高效:

import pandas as pd

# 读取所有工作表,返回{工作表名: DataFrame}的字典
all_sheets_data = pd.read_excel("Test1.xlsx", sheet_name=None, usecols=['Page', 'URL', 'Person'])

# 合并所有工作表的数据,重置行索引
combined_df = pd.concat(all_sheets_data.values(), ignore_index=True)

# 一次性写入CSV
combined_df.to_csv("emails.csv", index=False, columns=['Page', 'URL', 'Person'])

说明

  • sheet_name=None:让pandas读取Excel中的所有工作表,自动返回包含所有工作表数据的字典
  • pd.concat():将多个DataFrame纵向拼接成一个大的DataFrame,ignore_index=True会重置行号,避免不同工作表的索引冲突

内容的提问来源于stack exchange,提问作者SaltyJane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:07:01