如何用Pandas将多个CSV存入单个Excel文件的不同工作表?
解决方案:用Pandas将多个CSV存入Excel的不同工作表
先帮你梳理下当前代码的问题,再给出精准的实现方案:
- 语法错误:
df.to_csv('c.csv,' index=False)里的逗号错误地放在了引号内,应该改为df.to_csv('c.csv', index=False),这大概率是导致无输出的直接原因之一。 - 逻辑偏离需求:你当前的代码是把所有CSV内容合并成单个DataFrame后导出为CSV,但你的实际需求是将每个CSV原样存入Excel的独立工作表,两者逻辑完全不符。
- 遍历文件夹的语法问题:原代码中
folders=next(os.walk('.'))[1] for host in folders:是无效语法,正确写法应该是先获取子文件夹列表,再逐个遍历。
满足需求的完整代码
下面的代码会遍历指定范围的CSV文件,将每个CSV的内容原样存入Excel的独立工作表:
import os import glob import pandas as pd # 创建Excel写入对象,自动管理文件开闭 with pd.ExcelWriter('merged_excel.xlsx') as writer: # 递归遍历当前目录及所有子文件夹的CSV文件 for csv_path in glob.glob(os.path.join(os.getcwd(), '**', '*.csv'), recursive=True): # 读取原CSV内容 df = pd.read_csv(csv_path) # 用CSV文件名作为工作表名(去掉路径和后缀) sheet_name = os.path.splitext(os.path.basename(csv_path))[0] # 将数据写入对应工作表,保留原CSV格式 df.to_excel(writer, sheet_name=sheet_name, index=False) print("多工作表Excel文件已生成!")
代码细节说明
pd.ExcelWriter是Pandas专门用于生成多工作表Excel的工具,配合with语句无需手动关闭文件。- 如果只需要处理当前目录的CSV,去掉
glob参数里的recursive=True即可。 - 用CSV文件名作为工作表名,确保每个工作表和原CSV一一对应,内容完全保留。
index=False避免将DataFrame的索引写入Excel,和原CSV格式保持一致。
如果你只想处理特定子文件夹下的CSV(对应你原代码的遍历逻辑),可以用这个版本:
import os import glob import pandas as pd # 获取当前目录下的所有子文件夹 folders = next(os.walk('.'))[1] with pd.ExcelWriter('merged_excel.xlsx') as writer: for folder_name in folders: folder_path = os.path.join(os.getcwd(), folder_name) # 获取当前子文件夹下的所有CSV csv_files = glob.glob(os.path.join(folder_path, "*.csv")) for csv_path in csv_files: df = pd.read_csv(csv_path) # 用「文件夹名_文件名」作为工作表名,避免同名冲突 sheet_name = f"{folder_name}_{os.path.splitext(os.path.basename(csv_path))[0]}" df.to_excel(writer, sheet_name=sheet_name, index=False) print("多工作表Excel文件已生成!")
内容的提问来源于stack exchange,提问作者steveJ
相关产品推荐
相关产品推荐

