You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:20:32