在日常数据处理工作中,我们经常需要将分散在多个excel文件中的数据整合到一起进行分析。一个常见的需求是,在合并数据的同时,能够追溯每一条记录的来源文件。这对于数据审计、问题排查或理解数据上下文至关重要。本文将提供一个基于pandas库的专业解决方案,帮助您高效地完成这项任务。
要实现将多个Excel文件合并并添加来源文件名列的功能,我们需要遵循以下步骤:
以下是实现上述功能的Python代码示例:
import glob import pandas as pd import os # 导入os模块用于路径操作 def combine_excel_files_with_filename(input_path_pattern, output_file_path, sheet_name='Sheet1', skiprows=0, usecols=None): """ 合并指定路径下的所有Excel文件,并为每行数据添加来源文件名列。 Args: input_path_pattern (str): 用于查找Excel文件的路径模式,例如 '../content/*.xlsx'。 output_file_path (str): 合并后数据保存的Excel文件路径。 sheet_name (str): 保存合并数据时的工作表名称,默认为'Sheet1'。 skiprows (int or list-like): 读取Excel时要跳过的行数或行索引,默认为0。 usecols (list-like or None): 读取Excel时要使用的列名或列索引,默认为None(使用所有列)。 Returns: pd.DataFrame: 合并后的DataFrame。 """ # 使用glob查找所有匹配的Excel文件 files = glob.glob(input_path_pattern) if not files: print(f"在路径模式 '{input_path_pattern}' 下未找到任何Excel文件。") return pd.DataFrame() combined_df = pd.DataFrame() # 初始化一个空的DataFrame用于存储合并结果 print(f"开始处理 {len(files)} 个Excel文件...") for file_path in files: try: # 读取当前Excel文件 # 注意:如果usecols是列名列表,确保这些列在所有文件中都存在,否则可能引发KeyError。 # 这里为了与原始问题保持一致,保留了usecols和随后的列选择。 current_df = pd.read_excel(file_path, skiprows=skiprows, usecols=usecols) # 确保只选择需要的列(即使usecols已指定,此步骤可用于列的重新排序或进一步筛选) if usecols: current_df = current_df[usecols] # 获取文件名(不含路径)作为列值 # 或者使用完整路径:current_df['filename'] = file_path filename = os.path.basename(file_path) current_df['来源文件名'] = filename # 添加新的列,值为当前文件的文件名 # 将当前DataFrame追加到合并的DataFrame中 combined_df = pd.concat([combined_df, current_df], ignore_index=True) print(f"已处理文件: {filename}") except Exception as e: print(f"处理文件 '{file_path}' 时发生错误: {e}") continue # 继续处理下一个文件 # 将合并后的DataFrame保存到新的Excel文件 try: combined_df.to_excel(output_file_path, sheet_name=sheet_name, index=False) print(f"\n所有文件已成功合并并保存到 '{output_file_path}'。") except Exception as e: print(f"保存文件 '{output_file_path}' 时发生错误: {e}") return combined_df # 示例用法: if __name__ == "__main__": # 假设Excel文件位于 'content' 目录下 # 例如:../content/file1.xlsx, ../content/file2.xlsx input_pattern = r'../content/*.xlsx' output_file = "../content/multiplesheet_combined.xlsx" # 假设原始问题中的列名 target_columns = ['Уровень','Код WBS','Код','Тип','Название'] # 调用函数执行合并 final_combined_df = combine_excel_files_with_filename( input_path_pattern=input_pattern, output_file_path=output_file, skiprows=1, # 根据原始问题,跳过第一行 usecols=target_columns # 使用指定的列 ) if not final_combined_df.empty: print("\n合并后的数据框前5行:") print(final_combined_df.head())
all_dfs = [] for file_path in files: current_df = pd.read_excel(...) current_df['来源文件名'] = os.path.basename(file_path) all_dfs.append(current_df) combined_df = pd.concat(all_dfs, ignore_index=True)
这种方式通常更高效。
通过本教程,您已经掌握了如何使用Python的Pandas库高效地合并多个Excel文件,并为合并后的数据添加来源文件名列。这个功能在数据集成和可追溯性方面具有重要意义。通过灵活运用glob进行文件查找、pd.read_excel进行数据读取、以及巧妙地利用Pandas的列赋值特性,您可以轻松地处理日常工作中遇到的类似数据整合需求。请根据您的具体场景调整代码中的文件路径、跳过行数和目标列名,以达到最佳效果。
以上就是使用Pandas合并多个Excel文件并添加来源文件名列的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号