如何用Python将多个CSV文件合并至单个Excel工作表?
解决多CSV文件合并到Excel多工作表的问题
问题分析
你当前的核心问题是:无法将不同CSV文件的数据分别写入Excel的对应工作表,且因列数不一致引发数组错误。两次尝试的代码均存在逻辑或语法错误:
- 代码1仅读取单个CSV数据并重复写入所有工作表,导致所有标签页内容一致;
- 代码2存在变量未定义、错误转换DataFrame列表的问题,引发形状不匹配报错,同时未将每个CSV对应到正确工作表。
错误代码问题拆解
代码1的问题
- 仅读取
doc1.csv到reading变量,但未使用该变量,反而引用未定义的df(实际运行会直接报错); - 循环中未针对每个CSV文件重新读取数据,导致所有工作表写入相同内容。
代码2的问题
directory_path变量未定义,glob.glob无法正确获取文件路径;df = pd.DataFrame(df_list)是错误操作:df_list已经是DataFrame对象的列表,直接转换会因每个DataFrame列数/行数不同引发数组形状不匹配错误;- 循环逻辑混乱,未将每个CSV对应的DataFrame写入对应工作表。
修正后的代码
以下代码实现将指定目录下的所有CSV文件分别写入Excel的不同工作表,自动处理列数不一致的情况:
import pandas as pd import glob import os # 设置CSV文件所在目录 csv_dir = 'C:/Users/user3482176/correct_document_location' os.chdir(csv_dir) # 获取目录下所有CSV文件路径 csv_files = glob.glob('*.csv') # 创建Excel写入对象 with pd.ExcelWriter('combined_csv_files.xlsx', engine='openpyxl') as writer: for csv_file in csv_files: # 读取当前CSV文件 df = pd.read_csv(csv_file) # 提取文件名作为工作表名称(安全处理含多个点的文件名) sheet_name = os.path.splitext(csv_file)[0] # 将DataFrame写入对应工作表 df.to_excel(writer, sheet_name=sheet_name, index=False)
代码说明
- 使用
glob.glob('*.csv')自动获取目录下所有CSV文件,无需手动列出文件名; - 循环中每次读取单个CSV文件,确保每个工作表对应正确的数据;
os.path.splitext安全提取文件名(避免split('.')[0]在文件名含多个点时出错);- pandas会自动处理列数不一致的情况,缺失的列会填充为
NaN,不影响写入。
内容的提问来源于stack exchange,提问作者user3482176
相关产品推荐
相关产品推荐

