Python导入多Excel文件:为DataFrame添加文件名遇阻
解决Excel文件合并时添加来源文件名的问题
我明白你的需求——把文件夹里所有Excel文件的单个工作表数据合并成一个主DataFrame,同时要让每条数据都能对应上它来自哪个文件对吧?这其实只需要在读取每个文件后,给对应的DataFrame新增一列存储文件名,再合并就可以了。我给你调整了代码,同时加了一些实用的细节:
import os import pandas as pd path = "C:/backup/vp/apr 11 2018 and related files/All Files/" # 过滤出文件夹里的Excel文件,避免处理非表格文件导致报错 all_files = [os.path.join(path, file) for file in os.listdir(path) if file.endswith(('.xlsx', '.xls'))] main_df = pd.DataFrame() for file_path in all_files: # 提取不带路径的纯文件名,比如从完整路径里拿到"test.xlsx" file_name = os.path.basename(file_path) # 读取Excel文件的第一个工作表(如果要指定表名,加sheet_name="你的表名"即可) df = pd.read_excel(file_path) # 核心步骤:新增一列,把当前文件名赋值给这一列的所有行 df['来源文件'] = file_name # 用concat合并到主DataFrame,ignore_index重置索引避免重复 main_df = pd.concat([main_df, df], ignore_index=True) # 可以打印前几行验证结果 print(main_df.head())
关键细节说明:
- 用
os.path.join拼接路径比直接字符串相加更稳妥,能自动适配Windows和Linux的路径分隔符 os.path.basename专门用来提取纯文件名,不用自己手动切割字符串- 替换了过时的
append方法,用pd.concat合并DataFrame更高效,也是pandas官方推荐的方式 - 加了文件后缀过滤,确保只处理Excel文件,避免读取txt、图片这类文件时抛出异常
如果需要处理多工作表的文件,或者想捕获读取失败的情况,可以试试这个增强版:
import os import pandas as pd path = "C:/backup/vp/apr 11 2018 and related files/All Files/" all_files = [os.path.join(path, file) for file in os.listdir(path) if file.endswith(('.xlsx', '.xls'))] main_df = pd.DataFrame() for file_path in all_files: try: file_name = os.path.basename(file_path) # 获取文件里的所有工作表名 sheet_names = pd.ExcelFile(file_path).sheet_names for sheet in sheet_names: df = pd.read_excel(file_path, sheet_name=sheet) # 可以同时记录文件名和工作表名 df['来源文件'] = file_name df['来源工作表'] = sheet main_df = pd.concat([main_df, df], ignore_index=True) print(f"成功处理文件:{file_name}") except Exception as e: print(f"处理文件{file_name}时出错:{str(e)}") continue print(f"合并完成,总共有{len(main_df)}条数据")
内容的提问来源于stack exchange,提问作者brajesh kumar
相关产品推荐
相关产品推荐

