找回密码
 立即注册

QQ登录

只需一步,快速开始

Python中读取Excel最快的几种常见方法

2024-11-5 03:09| 发布者: c2688| 查看: 367| 评论: 0

摘要: 目次前言1. 使用pandas读取Excel文件2. 使用openpyxl读取Excel文件3. 使用xlrd和xlwt读取Excel文件4. 使用pyexcel作为一个同一的接口5.使用 Tablib 读取 Excel6.使用 Openpyxl 读取 Excel7.使用 LibreOffice 读取 Ex
目次

前言

在数据分析和处理处罚的一样平常工作中,Excel文件是一种非经常见的数据存储格式。Python,作为一种功能强大的编程语言,提供了多种库来帮助用户轻松读取Excel文件。本文将介绍几种使用Python读取Excel文件的常见方法。

1. 使用pandas读取Excel文件

pandas是Python数据分析范畴中最受欢迎的库之一,它提供了read_excel函数来直接读取Excel文件。

[code]import pandas as pd # 读取Excel文件 df = pd.read_excel('example.xlsx') # 显示前几行数据 print(df.head()) [/code]

这种方法简单快捷,非常适合进行数据分析工作。pandas支持读取.xls和.xlsx格式的文件,而且可以通过参数指定特定的工作表和单位格范围。

2. 使用openpyxl读取Excel文件

openpyxl是另一个强大的库,专门用于读写.xlsx文件。与pandas不同,openpyxl允许用户以更细粒度的方式利用Excel文件,例如读取或编辑单位格格式。

[code]from openpyxl import load_workbook # 加载Excel文件 wb = load_workbook('example.xlsx') # 选择工作表 sheet = wb.active # 读取特定单位格的数据 cell_value = sheet['A1'].value print(cell_value) [/code]

openpyxl是处理处罚复杂Excel文件的理想选择,比如需要读取或设置单位格的格式、公式等。

3. 使用xlrd和xlwt读取Excel文件

对于较旧版本的.xls文件,xlrd和xlwt库提供了读取和写入的功能。虽然它们不支持.xlsx格式的文件,但对于需要处理处罚遗留数据的环境非常有用。

[code]import xlrd # 打开文件 workbook = xlrd.open_workbook('example.xls') # 选择工作表 sheet = workbook.sheet_by_index(0) # 读取特定单位格的内容 cell_value = sheet.cell_value(0, 0) print(cell_value) [/code]

只管xlrd最新版本已经限定了对.xlsx文件的支持,但它仍旧是处理处罚.xls文件的有效工具。

4. 使用pyexcel作为一个同一的接口

pyexcel提供了一个简单的API来读取、处理处罚和写入多种不同格式的Excel文件。假如你在探求一个同一的接口来处理处罚不同类型的Excel文件,pyexcel大概是一个不错的选择。

[code]import pyexcel as p # 读取Excel文件 data = p.get_records(file_name='example.xlsx') for record in data: print(record) [/code]

pyexcel支持.xls、.xlsx、.xlsm等多种格式,使其成为处理处罚不同类型Excel文件的便捷工具。

5.使用 Tablib 读取 Excel

Tablib是 Python 中最盛行的库之一,用于导入和导出各种格式的数据。它最初是由盛行requests库的创建者开发的,因此其特点是同样关注开发人员体验和人体工程学。

安装:

[code]$ pip install tablib [/code]

代码:

[code]**import** tablib def iter\_excel\_tablib(file: IO\[bytes\]) -> Iterator\[dict\[str, object\]\]: yield from tablib.Dataset().load(file).dict [/code]

只需一行代码,该库就能完成所有繁重的工作。

在继承执行基准测试之前,我们先看看第一行的效果:

[code]with open(‘file.xlsx’, ‘rb’) as f:… rows = iter_excel_tablib(f)… row = next(rows)… print(row)…OrderedDict([(‘number’, 1),(‘decimal’, 1.1),(‘date’, datetime.datetime(2000, 1, 1, 0, 0)),(‘boolean’, True),(‘text’, ‘CONTROL ROW’)])[/code]

OrderedDict是 Python 的子类,dict具有一些额外的方法来重新排列字典顺序。它是在内置collections模块中界说的,当您哀求字典时,它就是 tablib 返回的内容。由于OrderedDict是 的子类dict而且它是在内置模块中界说的,因此我们不介怀并认为它足以满足我们的目的。

6.使用 Openpyxl 读取 Excel

Openpyxl是一个用 Python 读写 Excel 文件的库。与 Tablib 不同,Openpyxl 仅专用于 Excel,不支持任何其他文件类型。

究竟上,tablib和pandas在读取 xlsx 文件时都在底层使用 Openpyxl。也许这种专业化会带来更好的体现。

安装:

[code]$ pip install openpyxl [/code]

代码:

[code]**import** openpyxl def iter\_excel\_openpyxl(file: IO\[bytes\]) -> Iterator\[dict\[str, object\]\]: workbook = openpyxl.load\_workbook(file) rows = workbook.active.rows headers = \[str(cell.value) **for** cell in next(rows)\] **for** row in rows: yield dict(zip(headers, (cell.value **for** cell in row))) [/code]

这次我们要写的代码更多一些,让我们来分解一下:

  • 从打开的文件中加载工作簿:函数 load_workbook 同时支持文件路径和可读数据流。在本例中,我们对打开的文件进行利用。
  • 获取活动工作表:Excel 文件可以包罗多个工作表,我们可以选择读取哪个工作表。在本例中,我们只有一张工作表。
  • 构建页眉列表:Excel 文件的第一行包罗页眉。要将这些页眉作为字典的键,我们需要读取第一行并天生页眉列表。
  • 返回效果:openpyxl 使用的单位格类型包罗值和一些元数据。这对其他用途很有用,但我们只需要值。要访问单位格的值,我们使用 cell.value。

输出:

[code]with open(‘file.xlsx’, ‘rb’) as f:… rows = iter_excel_openpyxl(f)… row = next(rows)… print(row){‘boolean’: True,‘date’: datetime.datetime(2000, 1, 1, 0, 0),‘decimal’: 1.1,‘number’: 1,‘text’: ‘CONTROL ROW’}[/code]

7.使用 LibreOffice 读取 Excel

我们如今已经用尽了将 Excel 导入 Python 的传统且显而易见的方法。我们使用了顶级指定库并得到了不错的效果。如今是跳出框框思考的时间了。

LibreOffice是其他办公套件的免费开源替换品。LibreOffice 可以处理处罚 xls 和 xlsx 文件,而且还恰恰包罗带有一些有用的下令行选项的无头模式:

LibreOffice 下令行选项之一是在不同格式之间转换文件。例如,我们可以使用 libreoffice 将 xlsx 文件转换为 csv 文件:

[code]$ libreoffice --headless --convert-to csv --outdir . file.xlsx convert file.xlsx -> file.csv using filter: Text - txt - csv (StarCalc) $ head file.csv number,decimal,date,**boolean**,text 1,1.1,01/01/2000,TRUE,CONTROL ROW 2,1.2,01/02/2000,FALSE,RANDOM TEXT:0.716658989024692 3,1.3,01/03/2000,TRUE,RANDOM TEXT:0.966075283958641 [/code]

让我们用 Python 将其拼接起来。我们起首将 xlsx 文件转换为 CSV,然后将 CSV 导入 Python:

[code]**import** subprocess, tempfile, csv def iter\_excel\_libreoffice(file: IO\[bytes\]) -> Iterator\[dict\[str, object\]\]: with tempfile.TemporaryDirectory(prefix=‘excelbenchmark') as tempdir: subprocess.run(\[ ‘libreoffice', ‘–headless', ‘–convert-to', ‘csv', ‘–outdir', tempdir, file.name, \]) with open(f'{tempdir}/{file.name.rsplit(“.”)\[0\]}.csv', ‘r') as f: rows = csv.reader(f) headers = list(map(str, next(rows))) **for** row in rows: yield dict(zip(headers, row)) [/code]

让我们来分析一下:

  • 创建一个用于存储 CSV 文件的临时目次:使用内置的 tempfile 模块创建一个临时目次,完成后会自动清算。理想环境下,我们希望将特定文件转换为内存中的类文件对象,但 libreoffice 下令行不提供转换为特定文件的方法,只能转换为目次。
  • 使用 libreoffice 下令行将文件转换为 CSV:使用内置子历程模块执行利用系统下令。
  • 读取天生的 CSV:打开新创建的 CSV 文件,使用内置的 csv 模块进行分析并天生 dicts。

8.使用 DuckDB 读取 Excel

假如我们已经开始使用外部工具,为什么不给新人一个竞争的机遇呢?
DuckDB是一个“历程内SQL OLAP数据库管理系统”。此描述并没有立即说明为什么 DuckDB 在这种环境下有用,但确实如此。DuckDB 非常善于移动数据和格式之间的转换。

安装:

[code]$ pip install duckdb [/code]

代码:

[code]**import** duckdb def iter\_excel\_duckdb(file: IO\[bytes\]) -> Iterator\[dict\[str, object\]\]: duckdb.install\_extension(‘spatial') duckdb.load\_extension(‘spatial') rows = duckdb.sql(f"“” SELECT \* FROM st\_read( ‘{file.name}', open\_options=\[‘HEADERS=FORCE', ‘FIELD\_TYPES=AUTO'\]) “”") **while** row := rows.fetchone(): yield dict(zip(rows.columns, row)) [/code]

让我们来分析一下:

  • 安装并加载空间扩展:要使用 duckdb 从 Excel 中导入数据,需要安装空间扩展。这有点奇怪,因为空间扩展用于地理利用,但这正是它想要的。
  • 查询文件:直接使用 duckdb 全局变量执行查询时,默认环境下会使用内存数据库,类似于使用 :memory: 选项的 sqlite。要现实导入 Excel 文件,我们使用 st_read 函数,并将文件路径作为第一个参数。在函数选项中,我们将第一行设置为标题,并激活自动检测类型的选项(这也是默认选项)。
  • 构建效果遍历每一行,并使用每一行的标题和值列表构建 dict。

9.使用 Calamine 读取 Excel

比年来,Python 中的每个性能题目似乎最终都用另一种语言来解决。作为一名 Python 开发人员,我认为这是一个真正的祝福。这意味着我可以继承使用我风俗的语言并享受所有其他语言的性能优势!

Calamine是一个纯 Rust 库,用于读取 Excel 和 OpenDocument 电子表格文件。要安装python-calamine炉甘石的 Python 绑定,请执行以下下令:

[code]$ pip install python-calamine [/code]

代码:

[code]**import** python\_calamine def iter\_excel\_calamine(file: IO\[bytes\]) -> Iterator\[dict\[str, object\]\]: workbook = python\_calamine.CalamineWorkbook.from\_filelike(file) # type: ignore\[arg-type\] rows = iter(workbook.get\_sheet\_by\_index(0).to\_python()) headers = list(map(str, next(rows))) **for** row in rows: yield dict(zip(headers, row)) [/code]

性能总结

总结一下使用Python读取Excel文件的方法以及读取Excel花费的时间:

[code]Pandas 32.98Tablib 28.52Openpyxl 35.62Openpyxl (readonly) 24.79LibreOffice 15.27DuckDB (sql) 11.36DuckDB (execute) 5.73Calamine (python-calamine) 3.58[/code]

以上介绍了几种使用Python读取Excel文件的方法,每种方法都有其适用场景。对于数据分析师和开发者来说,选择符合的库可以极大地提高工作效率。
那么您应该使用哪一个呢?这取决于…在选择在 Python 中处理处罚 Excel 文件的库时,除了速率之外,另有一些其他考虑因素:

  • 写入能力:我们对读取 Excel 的方法进行了基准测试,但偶然也需要天生 Excel 文件。我们进行基准测试的一些库不支持写入。例如 Calamine,不能写入 Excel 文件,只能读取。
  • 其他格式:系统大概需要加载和天生 Excel 以外的其他格式的文件。一些库,例如 pandas 和 Tablib 支持多种附加格式,而 calamine 和 openpyxl 仅支持 Excel。

到此这篇关于Python中读取Excel最快的几种常见方法的文章就介绍到这了,更多相干Python读取Excel最快方法内容请搜刮脚本之家以前的文章或继承欣赏下面的相干文章希望大家以后多多支持脚本之家!


来源:https://www.jb51.net/python/3289079df.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新评论

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 16:05 , Processed in 0.034461 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部