Python合并两个Excel文件的两种主流方法

在日常数据处理中,合并Excel文件是常见需求,Python提供了多种库(如pandas、openpyxl)来实现这一操作,本文将详细介绍两种主流方法,并附上完整代码示例,帮助您高效完成Excel合并任务,需要的朋友可以参考下

目录
  • 引言
  • 方法一:使用pandas库(推荐)
    • 简介
    • 安装
    • 场景1:纵向合并(追加数据)
      • 示例数据
      • 代码示例
      • 输出结果
    • 场景2:横向合并(按列拼接)
      • 示例数据
      • 代码示例
      • 输出结果
    • 注意事项
    • 方法二:使用openpyxl库(保留格式)
      • 简介
        • 安装
          • 代码示例(纵向合并)
            • 优势与局限
            • 方案对比
              • 常见问题解答
                • 1. 如何合并多个Excel文件?
                  • 2. 合并时如何指定工作表?
                    • 3. 如何处理合并后的空值?
                    • 总结

                      引言

                      在日常数据处理中,合并Excel文件是常见需求。Python提供了多种库(如pandasopenpyxl)来实现这一操作。本文将详细介绍两种主流方法,并附上完整代码示例,帮助您高效完成Excel合并任务。

                      方法一:使用pandas库(推荐)

                      简介

                      pandas是Python中处理表格数据的核心库,支持快速读取、合并和保存Excel文件。适用于纵向合并(追加数据)横向合并(按列拼接)

                      安装

                      pip install pandas openpyxl xlrd
                      

                      场景1:纵向合并(追加数据)

                      示例数据

                      假设有两个Excel文件file1.xlsxfile2.xlsx,结构如下:

                      file1.xlsx

                      Name Age City
                      Alice 25 New York
                      Bob 30 London

                      file2.xlsx

                      Name Age City
                      Charlie 28 Paris
                      David 35 Berlin

                      代码示例

                      import pandas as pd
                      
                      # 读取两个Excel文件
                      df1 = pd.read_excel('file1.xlsx')
                      df2 = pd.read_excel('file2.xlsx')
                      
                      # 纵向合并(按行追加)
                      combined_df = pd.concat([df1, df2], ignore_index=True)
                      
                      # 保存为新文件
                      combined_df.to_excel('combined.xlsx', index=False)
                      
                      print("纵向合并完成!")
                      

                      输出结果

                      Name Age City
                      Alice 25 New York
                      Bob 30 London
                      Charlie 28 Paris
                      David 35 Berlin

                      场景2:横向合并(按列拼接)

                      示例数据

                      假设file1.xlsx包含用户信息,file2.xlsx包含订单数据,需按用户ID合并:

                      file1.xlsx

                      UserID Name
                      1 Alice
                      2 Bob

                      file2.xlsx

                      UserID Order
                      1 Book
                      2 Laptop

                      代码示例

                      import pandas as pd
                      
                      # 读取两个Excel文件
                      df1 = pd.read_excel('file1.xlsx')
                      df2 = pd.read_excel('file2.xlsx')
                      
                      # 按UserID列横向合并
                      merged_df = pd.merge(df1, df2, on='UserID', how='inner')
                      
                      # 保存为新文件
                      merged_df.to_excel('merged.xlsx', index=False)
                      
                      print("横向合并完成!")
                      

                      输出结果

                      UserID Name Order
                      1 Alice Book
                      2 Bob Laptop

                      注意事项

                      1. 列名一致性:纵向合并时,确保两个文件的列名完全一致(包括大小写和空格)。
                      2. 索引处理:使用ignore_index=True重置合并后的索引。
                      3. 去重操作:合并后可通过drop_duplicates()去除重复行。
                      4. 内存优化:处理大型文件时,可分块读取(chunksize参数)。

                      方法二:使用openpyxl库(保留格式)

                      简介

                      openpyxl可直接操作Excel文件,支持保留原始格式(如字体、颜色),但代码稍复杂。适用于需要保留样式的场景。

                      安装

                      pip install openpyxl
                      

                      代码示例(纵向合并)

                      from openpyxl import Workbook, load_workbook
                      
                      # 加载第一个Excel文件
                      wb1 = load_workbook('file1.xlsx')
                      ws1 = wb1.active
                      
                      # 加载第二个Excel文件
                      wb2 = load_workbook('file2.xlsx')
                      ws2 = wb2.active
                      
                      # 创建新工作簿
                      new_wb = Workbook()
                      new_ws = new_wb.active
                      
                      # 复制第一个文件的所有行
                      for row in ws1.iter_rows(values_only=True):
                          new_ws.append(row)
                      
                      # 复制第二个文件的所有行(跳过标题行)
                      for row in ws2.iter_rows(min_row=2, values_only=True):
                          new_ws.append(row)
                      
                      # 保存新文件
                      new_wb.save('combined_openpyxl.xlsx')
                      
                      print("使用openpyxl合并完成!")
                      

                      优势与局限

                      • 优势:保留原始格式(如颜色、边框)。
                      • 局限:代码复杂度高,不支持横向合并。

                      方案对比

                      方法 适用场景 优点 缺点
                      pandas 快速合并、数据清洗、横向/纵向合并 代码简洁、支持大数据量 无法保留格式
                      openpyxl 保留Excel样式、操作工作表结构 格式完全保留 代码复杂、性能较低

                      常见问题解答

                      1. 如何合并多个Excel文件?

                      使用pandas可循环读取多个文件:

                      import pandas as pd
                      
                      all_dfs = []
                      for file in ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']:
                          df = pd.read_excel(file)
                          all_dfs.append(df)
                      
                      combined = pd.concat(all_dfs, ignore_index=True)
                      

                      2. 合并时如何指定工作表?

                      使用sheet_name参数:

                      df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
                      

                      3. 如何处理合并后的空值?

                      使用dropna()去除空行:

                      combined_df.dropna(inplace=True)
                      

                      总结

                      • 推荐方案
                        • 数据清洗优先:选择pandas库,支持灵活的合并和清洗操作。
                        • 保留格式优先:使用openpyxl库,但仅适用于简单纵向合并。

                      通过本文的两种方法,您可以轻松实现Excel文件的合并,并根据具体需求选择最合适的工具。

                      到此这篇关于Python合并两个Excel文件的两种主流方法的文章就介绍到这了,更多相关Python合并Excel文件内容请搜索骃骐网以前的文章或继续浏览下面的相关文章希望大家以后多多支持骃骐网!

                      您可能感兴趣的文章:

                      • 利用Python实现Excel文件智能合并工具
                      • Python实现智能合并多个Excel
                      • Python自动化办公之合并多个Excel
                      • Python如何将两个Excel文件按相同字段合并到一起
                      • 使用Python合并 Excel单元格指定行列或单元格范围

                      相关推荐:

                      如何优雅地合并两个Python字典_使用Python 3.9提供的管道符运算

                      Python 3.9 的 | 运算符实现字典的浅层、右优先键值对覆盖合并,不修改原字典,不支持嵌套结构,返回新字典,要求键可哈希,语义清晰且类型安全。 Python 3.9 的 | 运算符到底合并什么 它不是“深合并”,也不是“递归覆盖”,而是对字典做**浅层、右优先的键值对覆盖合并**。左侧字典的键如果在右侧也存在,右侧的值直接生效;所有键被收集进一个新字典,原字典完全不动。 常见误解是以为 |...

                      怎么在Python TensorFlow里合并多个数据集_通过dataset.concatenate解决

                      concatenate会静默丢弃batch维度,导致batch_size变为1;须确保结构完全一致、统一batch后再concatenate,或改用sample_from_datasets实现比例混合。 concatenate 会静默丢弃 batch 维度,必须提前对齐 直接用 dataset.concatenate() 合并两个已 batch() 的数据集,结果往往出人意料:它不会报错,但会把 ...

                      如何在Python中高效合并两个字典_使用Python 3.9提供的管道符|运算符

                      能,Python 3.9 的 | 运算符可合并字典但只创建新字典;d1 | d2 返回新字典,d1 |= d2 才就地更新;| 语义清晰、类型校验严格,适用于不可变合并与链式组合。 Python 3.9 的 | 运算符真能直接合并字典? 能,但仅限于创建新字典,不修改原字典。它不是“增强版 update()”,而是类似 {**d1, **d2} 的语法糖,语义上更清晰、行为上更严格。 常见误解是以...

                      如何高效合并多个函数生成的DataFrame

                      使用列表推导式配合 pd.concat() 可以简洁、安全地批量调用函数并合并返回的多个dataframe,避免原地修改错误和内置名称覆盖问题。 使用列表推导式配合 pd.concat() 可以简洁、安全地批量调用函数并合并返回的多个dataframe,避免原地修改错误和内置名称覆盖问题。 在实际数据处理中,我们常需对一组标识(如 "base1", "base2", "base3")逐个调用同一函...

                      如何高效合并多个函数返回的DataFrame

                      使用列表推导式配合 pd.concat() 可一次性合并多个由函数生成的同结构dataframe,避免循环中误用 append() 导致数据丢失或逻辑错误。 使用列表推导式配合 pd.concat() 可一次性合并多个由函数生成的同结构dataframe,避免循环中误用 append() 导致数据丢失或逻辑错误。 在实际数据处理中,常需对一组参数(如文件名、API端点、数据库表名)依次调用同一函数...

                      Python Tkinter grid布局怎么用_网格布局按行列(row/column)精确摆放组件与跨行合并

                      grid()组件不对齐的根本原因是其“单元格”本质:不分配像素而按内容动态推导尺寸;须用grid_rowconfigure/columnconfigure设weight和minsize,避免混用pack/grid,跨行跨列需合理规划行列索引及sticky参数。 grid() 为什么组件总不按预期对齐? 根本原因不是 row/column 写错了,而是没理解 grid() 的“单元格”本质:它不分配...

                      Python 3.9中如何合并两个具有相同键的字典_使用管道符运算符

                      Python 3.9 的 | 运算符用于字典浅层合并,返回新字典、支持链式操作且右操作数优先覆盖同名键;不递归合并嵌套结构,仅整体替换值,非 Python 3.9+ 不可用。 Python 3.9 的 | 运算符能直接合并字典,但只做浅层覆盖,不递归合并嵌套结构。 为什么用 | 而不是 update() 或 ** 解包 因为 | 返回新字典,不修改原字典,语义清晰且支持链式操作;update() ...

                      如何在PHP中合并两个数组?通过array_merge()实现数组合并

                      最直接合并数组的方法是使用array_merge()函数,它能将多个数组合并为新数组,数字键重新索引,字符串键后值覆盖前值。 PHP中合并两个数组,最直接也是最常用的方法就是使用array_merge()函数。它能够将一个或多个数组的元素合并到一起,生成一个新的数组。不过,具体合并的逻辑会根据数组中键的类型(数字键或字符串键)有所不同,理解这些差异是高效使用的关键。 解决方案 array_merg...

                      2025年国庆中秋合并假期8天

                      2025年国庆中秋合并放假8天,从10月1日至8日,9月28日和10月11日调休上班,期间小型客车免费通行全国收费公路,因中秋节(10月4日)与国庆节重叠,依据新修订的放假办法实施长假安排。 2025年国庆中秋合并假期8天 根据国务院办公厅发布的2025年部分节假日安排,今年的国庆节和中秋节由于时间接近,将合并放假8天,为公众提供连续的休息时间。假期从10月1日开始至10月8日结束,期间全国收费公...

                      JavaScript/React中合并对象数组内嵌数组的实用教程

                      本教程将指导您如何在JavaScript和React应用中高效合并对象数组中嵌套的子数组。通过深入解析Array.prototype.reduce()方法,结合扩展运算符,我们将演示如何将多层嵌套的数据结构扁平化为一个单一的数组,避免常见的状态更新错误,并提供清晰的示例代码和最佳实践。理解问题:嵌套数据结构的扁平化 在前端开发中,我们经常会遇到复杂的数据结构。一个常见的场景是,我们有一个包含多个对...