合并Excel文件后输出格式异常求助:DataFrame第2、3行嵌入字符串
问题根源
你代码的核心问题是:使用sheet_name=None读取Excel文件时,返回的是字典类型(键为工作表名称,值为对应工作表的DataFrame),但你错误地用空DataFrame的append()方法去拼接这个字典,导致最终的df中出现了嵌套的DataFrame对象,写入Excel时就会出现数据异常。
修正方案
我们需要按工作表维度来合并数据:先创建一个字典,用来收集所有Excel文件中同名工作表的数据,最后再将每个工作表的所有数据合并后写入Excel。
修正后的代码
import pandas as pd import os input_path = 'C:/Users/Admin/Downloads/Test/' output_file = os.path.join(input_path, 'combined.xlsx') # 初始化字典,用于存储每个工作表的所有数据 sheet_data = {} # 遍历目录下的所有文件 for file in os.listdir(input_path): if file.endswith('.xlsx'): file_path = os.path.join(input_path, file) # 读取当前文件的所有工作表(返回字典) excel_sheets = pd.read_excel(file_path, sheet_name=None) # 遍历每个工作表,收集数据 for sheet_name, df in excel_sheets.items(): if sheet_name not in sheet_data: sheet_data[sheet_name] = [] sheet_data[sheet_name].append(df) # 合并每个工作表的所有数据,并写入Excel with pd.ExcelWriter(output_file, engine='xlsxwriter') as writer: for sheet_name, df_list in sheet_data.items(): # 合并当前工作表的所有数据 combined_df = pd.concat(df_list, ignore_index=True) # 写入工作表 combined_df.to_excel(writer, sheet_name=sheet_name, index=False)
关键改动说明
- 按工作表收集数据:用
sheet_data字典替代原有的空DataFrame,确保每个工作表的数据被单独收集,避免嵌套问题。 - 安全路径拼接:使用
os.path.join()拼接文件路径,避免因系统路径分隔符差异导致的错误。 - 使用
pd.concat替代append:append已在pandas 2.0+版本中被弃用,pd.concat是更稳定的合并方式。 - 上下文管理器:用
with语句管理ExcelWriter,无需手动调用save(),代码更简洁安全。
内容的提问来源于stack exchange,提问作者Devlife
相关产品推荐
相关产品推荐

