Python中处理Excel数据的方法对比(pandas和openpyxl)

文章目录
  • 虽然我的编程母语是 javascript,但是经常会使用python来处理各种格式的数据文件(如.txt、.json、.xlsx .csv、.sav等等)。当然处理得最多的还是Excel文件。为啥用python?好用啊!有各种开箱即用的工具库,如 pandas 和 openpyxl 这俩个好哥们都是我的码中常客。 pandas 和 openpyxl 哪家强? openpyxl 和 pandas 各有优势,选择需结合具体场景(如数据规模、操作类型、性能需求)。下面我们先从核心功能、性能、适用场景展等几个不同的维度做个对比。
  • 维度 openpyxl pandas 核心定位 Excel 文件底层操作(格式、样式、公式、图表) 数据分析与批量处理(清洗、聚合、透视表) 数据处理能力 基础读写,无内置分析函数 强大(筛选、聚合、时间序列分析等) 性能表现 小文件读取更快;增量模式(read_only=True)节省内存 大数据分析快(向量化计算);全加载内存,大文件易崩溃 格式支持 仅支持 .xlsx/.xlsm 等新格式 支持 Excel、CSV、JSON 等 样式/图表 精细控制(字体、颜色、图表、条件格式) 需依赖 openpyxl 引擎辅助实现 性能测试数据(10,000行数据集): 数据筛选:pandas 快 10 倍以上(0.02秒 vs 0.25秒) 数据聚合:pandas 快 50 倍(0.01秒 vs 0.5秒) 大文件读取:openpyxl 增量模式内存占用低 60%
  • 除 openpyxl 和 pandas 外,以下工具可以满足其他不同场景的需求: 工具 核心优势 适用场景 xlwings 双向交互 Excel VBA,实时更新数据 自动化报表(Python 计算 → Excel 动态展示) xlsxwriter 专注写入,支持高级格式(图表、条件格式、加密) 生成复杂格式报告(如带动态图表的仪表盘) xlrd/xlwt 兼容旧版 .xls 格式 (xlrd 读取,xlwt 写入) 处理 Excel 2003 及更早版本文件 Tablib 轻量级多格式转换(Excel/CSV/JSON 互转) 快速导出数据,无需复杂分析
  • 可根据下图决策:
  • 结合两者优势可让效率最大化: # 示例:openpyxl读取 → pandas处理 → openpyxl美化输出 from openpyxl import load_workbook import pandas as pd # 1. openpyxl增量读取大文件 wb = load_workbook(“large_file.xlsx”, read_only=True) data = [row for row in wb.active.values][1:] # 跳过标题 wb.close() # 2. pandas处理数据 df = pd.DataFrame(data, columns=[“Name”, “Age”]) df_filtered = df[df[“Age”] > 30].groupby(“Name”).mean() # 3. openpyxl输出带样式 with pd.ExcelWriter(“output.xlsx”, engine=”openpyxl”) as writer: df_filtered.to_excel(writer, sheet_name=”Summary”) workbook = writer.book worksheet = writer.sheets[“Summary”] # 设置标题样式 for cell in worksheet[1]: cell.font = Font(bold=True, color=”FFFFFF”) cell.fill = PatternFill(start_color=”366092″, fill_type=”solid”)
  • Python操作Excel的多种方式Pandas+openpyxl+xlrd
  • 选 openpyxl:精确控制格式/公式/图表(如财务报表模板)。 选 pandas:需数据清洗、统计或跨格式分析(如销售数据透视)。 选其他工具: 交互式报表 → xlwings 旧版文件 → xlrd/xlwt 高级写入 → xlsxwriter 混合方案:大文件或“分析+美化”场景的首选。 最终决策应结合数据规模、操作类型及输出需求。灵活组合工具可最大化效率 。 以上就是Python中处理Excel数据的方法对比(pandas和openpyxl)的详细内容,更多关于Python处理Excel数据的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python处理Excel的14个常用操作总结 Python数据处理之导入导出Excel数据方式 Python中高效处理Excel文件的10个常用库操作指南 Python Pandas高效处理Excel数据完整指南 Python处理大量Excel文件的十个技巧分享 使用Python处理Excel文件的全面指南(从读取到数据清洗)
  • 目录
    • 前言
    • 一、openpyxl 与 pandas 核心对比
    • 二、其他 Excel 处理工具推荐
    • 三、如何选择工具
    • 四、混合使用策略(推荐场景)
    • 方法补充
      • Pandas
      • openpyxl
      • xlrd
    • 总结建议

      虽然我的编程母语是 javascript,但是经常会使用python来处理各种格式的数据文件(如.txt、.json、.xlsx .csv、.sav等等)。当然处理得最多的还是Excel文件。为啥用python?好用啊!有各种开箱即用的工具库,如 pandas 和 openpyxl 这俩个好哥们都是我的码中常客。

      pandas 和 openpyxl 哪家强?

      openpyxl 和 pandas 各有优势,选择需结合具体场景(如数据规模、操作类型、性能需求)。下面我们先从核心功能、性能、适用场景展等几个不同的维度做个对比。

      维度 openpyxl pandas
      核心定位 Excel 文件底层操作(格式、样式、公式、图表) 数据分析与批量处理(清洗、聚合、透视表)
      数据处理能力 基础读写,无内置分析函数 强大(筛选、聚合、时间序列分析等)
      性能表现 小文件读取更快;增量模式(read_only=True)节省内存 大数据分析快(向量化计算);全加载内存,大文件易崩溃
      格式支持 仅支持 .xlsx/.xlsm 等新格式 支持 Excel、CSV、JSON 等
      样式/图表 精细控制(字体、颜色、图表、条件格式) 需依赖 openpyxl 引擎辅助实现

      性能测试数据(10,000行数据集):

      • 数据筛选:pandas 快 10 倍以上(0.02秒 vs 0.25秒)
      • 数据聚合:pandas 快 50 倍(0.01秒 vs 0.5秒)
      • 大文件读取:openpyxl 增量模式内存占用低 60%

      除 openpyxl 和 pandas 外,以下工具可以满足其他不同场景的需求:

      工具 核心优势 适用场景
      xlwings 双向交互 Excel VBA,实时更新数据 自动化报表(Python 计算 → Excel 动态展示)
      xlsxwriter 专注写入,支持高级格式(图表、条件格式、加密) 生成复杂格式报告(如带动态图表的仪表盘)
      xlrd/xlwt 兼容旧版 .xls 格式 (xlrd 读取,xlwt 写入) 处理 Excel 2003 及更早版本文件
      Tablib 轻量级多格式转换(Excel/CSV/JSON 互转) 快速导出数据,无需复杂分析

      可根据下图决策:

      结合两者优势可让效率最大化:

      # 示例:openpyxl读取 → pandas处理 → openpyxl美化输出
      from openpyxl import load_workbook
      import pandas as pd
      
      # 1. openpyxl增量读取大文件
      wb = load_workbook("large_file.xlsx", read_only=True)
      data = [row for row in wb.active.values][1:]  # 跳过标题
      wb.close()
      
      # 2. pandas处理数据
      df = pd.DataFrame(data, columns=["Name", "Age"])
      df_filtered = df[df["Age"] > 30].groupby("Name").mean()
      
      # 3. openpyxl输出带样式
      with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
          df_filtered.to_excel(writer, sheet_name="Summary")
          workbook = writer.book
          worksheet = writer.sheets["Summary"]
          # 设置标题样式
          for cell in worksheet[1]:
              cell.font = Font(bold=True, color="FFFFFF")
              cell.fill = PatternFill(start_color="366092", fill_type="solid")
      

      Python操作Excel的多种方式Pandas+openpyxl+xlrd

      pip install pandas

      使用pandas操作Excel文件主要涉及读取(read_excel)和写入(to_excel)两个主要操作。

      读取Excel文件(read_excel)

      pandas的read_excel函数用于读取Excel文件(.xls或.xlsx),并将其内容加载到DataFrame对象中。

      语法参数

      • io: 文件路径或文件对象。
      • sheet_name: 指定要读取的工作表名称或索引。可以是字符串、整数、字符串列表或None。如果是None,则返回字典,其中包含所有工作表。
      • header: 指定作为列名的行,默认为0(第一行)。如果文件没有列标题,可以设置为None。
      • names: 用于结果的列名的列表,如果文件不包含列标题行,应该明确指定此参数。
      • index_col: 用作行索引的列编号或列名,可以是整数、字符串、整数列表、字符串列表或False(默认)。
      • usecols: 返回列的列号或列名列表。
      • dtype: 数据或字典,用于强制指定某些列的数据类型。
      • engine: 用于读取Excel文件的引擎。None将尝试使用io的扩展名来选择引擎。如果安装了xlrd,则.xls文件将使用它;否则,将使用openpyxl或odfpy(对于.ods文件)。

      案例:

      import pandas as pd  
        
      # 读取Excel文件  
      df = pd.read_excel('example.xlsx', sheet_name='Sheet1', header=0, index_col=None, usecols=None, dtype=None)  
        
      # 显示前几行数据  
      print(df.head())  
        
      # 如果文件没有列标题  
      df_no_header = pd.read_excel('example_no_header.xlsx', header=None, names=['Column1', 'Column2', 'Column3'])  
      print(df_no_header.head())  
        
      # 读取多个工作表  
      xls = pd.ExcelFile('example.xlsx')  
      df1 = pd.read_excel(xls, 'Sheet1')  
      df2 = pd.read_excel(xls, 'Sheet2')  
      # 或者  
      dfs = pd.read_excel(xls, sheet_name=None)  # 返回一个字典,键为工作表名,值为DataFrame

      进阶案例:读取特定单元格范围

      虽然read_excel没有直接读取特定单元格范围的参数,但你可以通过usecols和行切片来实现类似的效果。

      # 假设我们只想读取'A'列和'C'列的前两行  
      df = pd.read_excel('example.xlsx', usecols=['A', 'C']).head(2)

      写入Excel文件(to_excel)

      DataFrame的to_excel方法用于将DataFrame写入Excel文件。

      语法参数

      • excel_writer: 文件路径或ExcelWriter对象。
      • sheet_name: 字符串,默认为'Sheet1'。
      • columns: 要写入的列名列表。
      • header: 是否写入列名作为Excel文件的第一行,默认为True。
      • index: 是否将行索引写入Excel文件,默认为True。
      • startrow 和 startcol: 左上角单元格的行号和列号,用于开始写入,默认为0。
      • engine: 用于写入Excel文件的引擎,默认为None(将尝试使用openpyxl或xlsxwriter)。

      案例

      # 创建一个简单的DataFrame  
      df = pd.DataFrame({  
          'A': [1, 2, 3, 4],  
          'B': ['foo', 'bar', 'baz', 'qux'],  
          'C': [1.0, 2.1, 3.2, 4.3]  
      })  
        
      # 写入Excel文件  
      df.to_excel('output.xlsx', sheet_name='Sheet1', index=False, header=True)  
        
      # 如果要写入多个工作表  
      with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:  
          df.to_excel(writer, sheet_name='Sheet1', index=False)  
          df.to_excel(writer, sheet_name='Sheet2', index=False, startrow=10)  # 从第11行开始写入

      进阶案例:写入带有样式的Excel

      为了写入带有样式的Excel文件,你需要使用ExcelWriter和xlsxwriter或openpyxl引擎(取决于你的需求)。

      # 使用xlsxwriter引擎写入带有样式的Excel  
      with pd.ExcelWriter('styled_output.xlsx', engine='xlsxwriter') as writer:  
          df.to_excel(writer, sheet_name='Sheet1', index=False)  
          workbook = writer.book  
          worksheet = writer.sheets['Sheet1']  
            
          # 创建一个格式对象  
          format = workbook.add_format({'bold': True, 'font_color': 'red'})  
            
          # 应用格式到特定单元格  
          worksheet.write('A1', 'Styled Cell', format)

      注意:xlsxwriter引擎在写入时不支持直接修改已存在的DataFrame内容(如通过DataFrame.style),它主要用于在写入时添加额外的样式或格式。如果你需要复杂的样式处理,可能需要结合使用pandas和openpyxl(或xlsxwriter)的高级功能。

      openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它提供了丰富的接口来操作 Excel 文件,包括读取、修改和写入数据,以及设置样式等。下面我将详细解释如何使用 openpyxl 操作 Excel,并给出案例代码和进阶案例。

      安装 openpyxl

      首先,确保你已经安装了 openpyxl。如果还没有安装,可以通过 pip 安装:

      pip install openpyxl

      基本操作

      1.加载工作簿

      使用 openpyxl.load_workbook() 函数加载一个现有的 Excel 文件。

      from openpyxl import load_workbook  
        
      wb = load_workbook(filename='example.xlsx')

      2.激活工作表

      通过工作簿对象获取工作表。你可以通过工作表名称或索引来访问特定的工作表。

      # 通过名称  
      ws = wb['Sheet1']  
        
      # 或者通过索引(索引从0开始)  
      ws = wb.worksheets[0]  
        
      # 也可以使用 active 属性获取当前活动的工作表  
      ws = wb.active

      3.读取数据

      你可以通过单元格的坐标来读取数据。

      # 读取单元格的值  
      cell_value = ws['A1'].value  
      print(cell_value)  
        
      # 遍历行  
      for row in ws.iter_rows(values_only=True):  
          print(row)  
        
      # 遍历列  
      for col in ws.iter_cols(values_only=True):  
          for value in col:  
              print(value)

      4.写入数据

      你可以直接给单元格赋值来写入数据。

      # 写入数据  
      ws['B2'] = 'Hello, openpyxl!'  
        
      # 保存修改  
      wb.save('modified_example.xlsx')

      语法参数详解

      由于 openpyxl 的功能非常广泛,这里只列举一些常用函数和方法的参数。

      • load_workbook(filename, read_only=False, data_only=False, keep_vba=True, ...)
        • filename: Excel 文件路径。
        • read_only: 是否以只读模式打开文件。
        • data_only: 是否只读取单元格的值,忽略公式(默认为 False)。
        • keep_vba: 是否保留 VBA 内容(默认为 True)。
      • Worksheet.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False, ...)
        • min_row, max_row, min_col, max_col: 指定迭代的行或列的范围。
        • values_only: 是否只迭代单元格的值(默认为 False,迭代单元格对象)。
      • Worksheet.iter_cols(...) 与 iter_rows 类似,但用于列迭代。

      案例代码

      读取并修改 Excel

      from openpyxl import load_workbook  
        
      # 加载工作簿  
      wb = load_workbook('example.xlsx')  
        
      # 激活工作表  
      ws = wb.active  
        
      # 读取单元格数据  
      print(ws['A1'].value)  
        
      # 修改单元格数据  
      ws['B2'] = 'New Value'  
        
      # 保存修改后的工作簿  
      wb.save('modified_example.xlsx')

      进阶案例

      设置样式

      from openpyxl import Workbook  
      from openpyxl.styles import Font, Color, Alignment, Border, Side  
        
      # 创建一个新的工作簿和工作表  
      wb = Workbook()  
      ws = wb.active  
        
      # 创建一个字体对象  
      font = Font(name='Calibri', size=11, bold=True, italic=False, vertAlign=None,  
                  underline='none', strike=False, color='FF0000')  
        
      # 创建一个对齐对象  
      alignment = Alignment(horizontal='general', vertical='bottom',  
                            text_rotation=0, wrap_text=False,  
                            shrink_to_fit=False, indent=0)  
        
      # 创建一个边框对象  
      thin = Side(border_style="thin", color="000000")  
      border = Border(top=thin, left=thin, right=thin, bottom=thin)  
        
      # 应用样式到单元格  
      ws['A1'].font = font  
      ws['A1'].alignment = alignment  
      ws['A1'].border = border  
      ws['A1'] = 'Styled Cell'  
        
      # 保存工作簿  
      wb.save('styled_workbook.xlsx')

      在进阶案例中,我们展示了如何创建字体、对齐和边框样式,并将它们应用到单元格上。openpyxl 提供了丰富的样式选项,可以满足大多数 Excel 样式设置的需求。

      xlrd 是一个用于读取 Excel 文件(主要是 .xls 和 .xlsx 格式,尽管对 .xlsx 的支持可能不如 openpyxl 全面)的 Python 库。然而,需要注意的是,从版本 2.0.0 开始,xlrd 仅支持 .xls 格式的文件,不再支持 .xlsx。对于 .xlsx 文件,推荐使用 openpyxl 或 pandas(后者底层可以调用 openpyxl)。

      安装 xlrd

      首先,确保你已经安装了 xlrd。如果还没有安装,可以通过 pip 安装:

      pip install xlrd==1.2.0  # 最好选择一个支持.xlsx的旧版本

      基本操作

      加载工作簿

      使用 xlrd.open_workbook() 函数加载 Excel 文件。

      import xlrd  
        
      # 加载工作簿  
      workbook = xlrd.open_workbook('example.xls')

      访问工作表

      通过索引或名称访问工作表。

      # 通过索引访问(索引从0开始)  
      sheet = workbook.sheet_by_index(0)  
        
      # 或者通过名称访问  
      sheet = workbook.sheet_by_name('Sheet1')

      读取数据

      使用行号(从0开始)和列号(也从0开始)或单元格名称(如 'A1')来读取数据。

      # 通过行号和列号读取  
      cell_value = sheet.cell_value(0, 0)  # 读取第一行第一列的数据  
      print(cell_value)  
        
      # 或者使用 cell 方法(返回单元格对象,然后可以调用 value 属性)  
      cell = sheet.cell(0, 0)  
      print(cell.value)  
        
      # 通过单元格名称读取(需要安装xlutils或类似库来转换A1表示法)  
      # 注意:xlrd本身不直接支持A1表示法,这里仅作为说明  
      # 通常,你会通过计算行号和列号来访问单元格

      语法参数详解

      由于 xlrd 的 API 相对简单,这里主要关注 open_workbook() 和 sheet_by_...() 方法的参数。

      • xlrd.open_workbook(filename=None, ...)
        • filename: Excel 文件路径。
        • 其他参数(如 on_demand、formatting_info 等)在较新版本的 xlrd 中可能不再支持或用途有限,特别是针对 .xlsx 文件的处理。
      • workbook.sheet_by_index(sheetx) 和 workbook.sheet_by_name(sheet_name)
        • sheetx: 工作表的索引(整数)。
        • sheet_name: 工作表的名称(字符串)。

      案例代码

      读取 Excel 文件中的数据

      import xlrd  
        
      # 加载工作簿  
      workbook = xlrd.open_workbook('example.xls')  
        
      # 通过名称访问工作表  
      sheet = workbook.sheet_by_name('Sheet1')  
        
      # 读取并打印第一行和第一列的数据  
      print(sheet.cell_value(0, 0))  
        
      # 遍历所有行和列  
      for row_idx in range(sheet.nrows):  
          for col_idx in range(sheet.ncols):  
              print(sheet.cell_value(row_idx, col_idx), end='t')  
          print()  # 换行

      • 选 openpyxl:精确控制格式/公式/图表(如财务报表模板)。
      • 选 pandas:需数据清洗、统计或跨格式分析(如销售数据透视)。
      • 选其他工具:
        • 交互式报表 → xlwings
        • 旧版文件 → xlrd/xlwt
        • 高级写入 → xlsxwriter
      • 混合方案:大文件或“分析+美化”场景的首选。

      最终决策应结合数据规模、操作类型及输出需求。灵活组合工具可最大化效率 。

      以上就是Python中处理Excel数据的方法对比(pandas和openpyxl)的详细内容,更多关于Python处理Excel数据的资料请关注风君子博客其它相关文章!

      您可能感兴趣的文章:

      • Python处理Excel的14个常用操作总结
      • Python数据处理之导入导出Excel数据方式
      • Python中高效处理Excel文件的10个常用库操作指南
      • Python Pandas高效处理Excel数据完整指南
      • Python处理大量Excel文件的十个技巧分享
      • 使用Python处理Excel文件的全面指南(从读取到数据清洗)

      站内搜索