讲师中心 微信公众号
AI工具推荐 视频效率加速

使用Pandas合并多个Excel文件并自动添加文件名列

陌墨吖_2548

陌墨吖_2548

发布时间:2025-07-03 21:02:15

|

311人浏览过

|

来源于php中文网

原创

使用Pandas合并多个Excel文件并自动添加文件名列

本教程详细介绍了如何使用Python的Pandas库高效合并多个Excel文件。文章将指导读者通过遍历文件、读取数据,并在合并过程中为每条记录自动添加一个包含其来源文件名的列。这对于数据溯源和管理批量导入的数据至关重要,帮助用户轻松整合分散的数据并保持其来源信息。

在日常数据处理中,我们经常会遇到需要将多个结构相似的excel文件合并成一个统一数据集的场景。更进一步的需求是,在合并后的数据中,能够清晰地识别每条记录来源于哪个原始文件。本文将详细阐述如何利用pandas库实现这一目标,为合并后的数据添加一个“文件名”列,从而增强数据溯源能力。

准备工作

在开始之前,请确保你的Python环境中已经安装了pandas库。如果尚未安装,可以通过以下命令进行安装:

pip install pandas openpyxl

openpyxl是Pandas读取和写入.xlsx格式Excel文件所需的引擎。

我们还需要glob库来查找指定目录下的所有Excel文件,以及os库来处理文件路径。

import glob
import pandas as pd
import os

假设所有待合并的Excel文件都位于一个特定目录下,例如../content/。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

核心实现:合并文件与添加文件名

实现此功能的关键在于遍历每个文件,在读取数据后,立即为其添加一个表示来源文件名的列,然后将处理后的数据追加到总的DataFrame中。

以下是实现此功能的详细步骤和代码:

  1. 查找所有目标文件: 使用glob.glob()函数根据文件模式查找所有匹配的文件路径。
  2. 初始化合并后的DataFrame: 创建一个空的Pandas DataFrame,用于存储所有文件的合并数据。
  3. 遍历并处理每个文件:
    • 在循环中,逐一读取每个Excel文件。
    • 在读取数据时,可以指定跳过的行数(例如skiprows=1,跳过标题行)和需要使用的列(usecols)。
    • 关键步骤: 为当前文件读取到的DataFrame添加一个名为filename的新列,其值设置为当前文件的基本名称(不包含路径)。
    • 将处理后的当前文件DataFrame追加到之前初始化的总DataFrame中。
  4. 保存合并结果: 将最终合并的DataFrame保存为一个新的Excel文件。
import glob
import pandas as pd
import os

# 定义待处理Excel文件的目录和文件模式
# 假设所有Excel文件都以.xlsx结尾,并位于 '../content/' 目录下
file_pattern = '../content/*.xlsx'
files = glob.glob(file_pattern)

# 初始化一个空的DataFrame,用于存储所有合并后的数据
combined_df = pd.DataFrame()

# 定义我们感兴趣的列名,这些列将从每个Excel文件中读取
# 请根据实际Excel文件的列名进行调整
target_columns = ['Уровень', 'Код WBS', 'Код', 'Тип', 'Название']

print(f"发现 {len(files)} 个Excel文件待处理。")

# 遍历每个文件
for file_path in files:
    try:
        # 1. 读取Excel文件
        # skiprows=1 表示跳过第一行(通常是标题或不必要的信息)
        # usecols 指定只读取我们需要的列,提高效率并确保数据一致性
        df = pd.read_excel(file_path,
                           skiprows=1,
                           usecols=target_columns)

        # 2. 确保DataFrame只包含目标列,并按照指定顺序排列
        # 这一步在usecols已经指定的情况下,主要是为了明确列的顺序
        df = df[target_columns]

        # 3. 添加文件名列
        # os.path.basename(file_path) 用于提取文件名,不包含路径
        df['filename'] = os.path.basename(file_path)

        # 4. 将当前文件的数据追加到合并后的DataFrame
        # ignore_index=True 会重置索引,避免不同文件数据索引重复
        combined_df = pd.concat([combined_df, df], ignore_index=True)
        print(f"已成功处理文件: {os.path.basename(file_path)}")

    except FileNotFoundError:
        print(f"错误:文件未找到 - {file_path}")
    except KeyError as e:
        print(f"错误:文件 {os.path.basename(file_path)} 中缺少必要的列:{e}")
    except Exception as e:
        print(f"处理文件 {os.path.basename(file_path)} 时发生未知错误: {e}")
        # 可以选择跳过当前文件并继续处理下一个
        continue

# 定义输出文件的路径
output_file = "../content/multiplesheet.xlsx"

# 将合并后的数据保存到新的Excel文件
try:
    # index=False 避免将DataFrame的索引作为一列写入Excel文件
    combined_df.to_excel(output_file, sheet_name='Sheet', index=False)
    print(f"\n所有文件已成功合并并保存到: {output_file}")
except Exception as e:
    print(f"\n保存合并文件 {output_file} 时发生错误: {e}")

注意事项

  1. 文件路径与模式: glob.glob()支持通配符,如*.xlsx表示所有.xlsx文件,**/*.xlsx表示递归查找子目录中的所有.xlsx文件(需设置recursive=True)。请根据你的文件组织结构调整file_pattern。
  2. 列选择与跳过行:
    • skiprows参数非常有用,可以跳过Excel文件开头的非数据行,确保只读取到有效数据。
    • usecols参数可以指定需要读取的列名或列索引。这不仅可以减少内存消耗,还能避免读取不必要的列,并且在某些列不存在时,Pandas会抛出KeyError,有助于发现数据结构问题。
    • 代码中df = df[target_columns]这一行,在usecols已经指定列的情况下,主要作用是确保列的顺序与target_columns列表中的顺序一致。如果usecols已经保证了顺序且没有其他不需要的列,这一行可以省略。
  3. 文件名处理: 使用os.path.basename(file_path)可以只获取文件名部分,而不是完整的路径,这使得filename列的数据更加简洁和易读。如果需要完整的路径,可以直接使用file_path。
  4. 性能优化: 对于处理大量Excel文件(例如成百上千个)或单个文件非常大的情况,pd.concat在循环中频繁调用可能会导致性能问题。更优化的方法是先将每个文件读取到的DataFrame存储在一个列表中,然后在循环结束后一次性调用pd.concat:
    all_dfs = []
    for file_path in files:
        # ... 读取df,添加filename列 ...
        all_dfs.append(df)
    combined_df = pd.concat(all_dfs, ignore_index=True)
  5. 错误处理: 在实际应用中,文件可能不存在、文件格式不正确或缺少预期的列。使用try-except块可以捕获这些异常,防止程序崩溃,并提供有用的错误信息。
  6. 索引重置: pd.concat函数中的ignore_index=True参数至关重要。它会在合并后为新的DataFrame生成一个连续的默认整数索引,避免了原始DataFrame索引的重复或混乱。
  7. 输出文件: to_excel()函数中的index=False参数用于防止将DataFrame的内部索引作为一列写入到输出的Excel文件中。

总结

通过本教程,我们学习了如何利用Python的Pandas库高效地合并多个Excel文件,并为合并后的数据自动添加一个表示其来源文件名的列。这一方法不仅简化了数据整合过程,更重要的是,它为数据分析和溯源提供了极大的便利。掌握这一技巧,将使你在处理批量Excel数据时更加得心应手。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

272

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

791

2026.04.13

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2781

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

396

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

437

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

492

2026.05.09

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

19393

2025.10.16

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn