如何用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
相关产品推荐
相关产品推荐

