如何用Python编写函数批量导入Excel并自动添加文件名列?
批量合并Excel文件并添加文件名列的Python实现
实现思路
直接封装一个函数完成全流程:遍历指定文件夹下的所有Excel文件,逐个读取为DataFrame并添加原文件名列;同时支持手动指定或从文件名自动提取Année和Mois列,替代你之前手动设置固定值的重复操作,最后合并所有数据为单个DataFrame。
完整代码实现
先确保安装依赖库:
pip install pandas openpyxl # openpyxl用于读取xlsx格式文件
封装好的函数:
import pandas as pd import os import re # 用于正则提取日期,可选 def merge_excel_files(folder_path, file_extensions=('.xlsx', '.xls'), date_mapping=None, extract_date_regex=None): dfs = [] for filename in os.listdir(folder_path): # 跳过非Excel文件 if not filename.endswith(file_extensions): continue file_full_path = os.path.join(folder_path, filename) # 读取Excel,可按需指定sheet_name、header等参数 df = pd.read_excel(file_full_path) # 添加原文件名列 df['原文件名'] = filename # 处理Année和Mois列:优先使用手动映射 if date_mapping and filename in date_mapping: df['Année'], df['Mois'] = date_mapping[filename] # 其次用正则从文件名提取(适配自定义文件名格式) elif extract_date_regex: match = re.search(extract_date_regex, filename) if match: df['Année'] = match.group(1) df['Mois'] = match.group(2) dfs.append(df) # 合并所有DataFrame并重置索引 final_df = pd.concat(dfs, ignore_index=True) return final_df
不同场景的使用示例
场景1:仅添加文件名列
# 替换为你的Excel文件所在文件夹路径 result_df = merge_excel_files('./your_excel_folder')
场景2:手动指定部分文件的日期
如果部分文件无法从文件名提取日期,直接传入映射字典:
date_map = { "ventes_octobre.xlsx": ("2021", "Octobre"), "ventes_novembre.xlsx": ("2021", "Novembre"), "ventes_decembre.xlsx": ("2021", "Décembre") } result_df = merge_excel_files('./your_excel_folder', date_mapping=date_map)
场景3:从文件名自动提取日期
假设文件名格式为"2021_Octobre_ventes.xlsx",用正则匹配提取:
# 正则匹配4位年份和后续的月份字符串 regex_pattern = r'(\d{4})_(\w+)' result_df = merge_excel_files('./your_excel_folder', extract_date_regex=regex_pattern)
注意事项
- 若Excel含多个工作表,可在
pd.read_excel中添加sheet_name参数(如sheet_name=0读第一个表,sheet_name=None读所有表) - 不同文件列名不一致时,合并会自动补全缺失值为
NaN,可通过pd.concat的join参数调整合并规则 - 处理大文件时,可添加分块读取逻辑优化内存占用
内容的提问来源于stack exchange,提问作者Boutayna
相关产品推荐
相关产品推荐

