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

今天我们分享如何使用python读取excel。‍‍‍‍‍‍‍‍‍

在文章开始之前打个小广告——给大家准备了一份爬虫学习大礼包(学习方法、思维导图、练习项目、书籍、网课),点击领取哦!

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

1. 使用pandas读取Excel文件

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

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

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

2. 使用openpyxl读取Excel文件

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

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

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

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

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

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

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

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

pyexcel提供了一个简单的API来读取、处理和写入多种不同格式的Excel文件。如果你在寻找一个统一的接口来处理不同类型的Excel文件,pyexcel可能是一个不错的选择。

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

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

5.使用 Tablib 读取 Excel

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

安装:

$ pip install tablib

代码:

**import** tablib

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

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

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

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’)])

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

6.使用 Openpyxl 读取 Excel

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

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

安装:

$ pip install openpyxl

代码:

**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)))

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

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

输出:

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’}

7.使用 LibreOffice 读取 Excel

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

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

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

$ 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

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

**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))

让我们来分析一下:

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

8.使用 DuckDB 读取 Excel

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

安装:

$ pip install duckdb

代码:

**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))

让我们来分析一下:

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

9.使用 Calamine 读取 Excel

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

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

$ pip install python-calamine

代码:

**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))

性能总结

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

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

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

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

以上就是“Python中读取Excel最快的几种方法的全部内容,希望对你有所帮助。

最后这里免费分享给大家一份Python学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
编程资料、学习路线图、源代码、软件安装包等!

领取方式,看看下方图片哦!

Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程,手机也能学习
历年互联网企业Python面试真题,复习时非常方便****

在这里插入图片描述

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python使用pandas库可以很方便地将Excel表格转换为DataFrame对象,然后再通过SQLAlchemy库将DataFrame对象插入MySQL数据库。 首先需要安装pandas和SQLAlchemy库。打开终端(或命令提示符),输入以下命令: ``` pip install pandas pip install sqlalchemy ``` 接着,需要设置MySQL数据库连接信息。在Python,可以通过创建一个数据库引擎对象来连接MySQL数据库。在这里,我们可以使用如下代码创建一个MySQL数据库引擎对象: ``` from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://username:password@hostname:port/databasename') ``` 其,`username`和`password`是MySQL数据库的用户名和密码,`hostname`是MySQL数据库所在的主机名或IP地址,`port`是连接MySQL数据库的端口号,默认为3306,`databasename`是要连接的数据库名。 在连接好数据库后,我们可以使用pandas库读取Excel表格,并将其转换为DataFrame对象: ``` import pandas as pd df = pd.read_excel('filepath/excel_file.xlsx') ``` 需要注意的是,`filepath`是Excel文件所在的路径,`excel_file.xlsx`是文件的名称,需要根据实际情况进行替换。 最后,我们可以将DataFrame对象插入到MySQL数据库: ``` df.to_sql(name='table_name', con=engine, if_exists='replace', index=False) ``` 其,`table_name`是要插入数据的MySQL表格名称,`if_exists`参数用于控制是否覆盖已有的表格信息,如果为`replace`,则会删除已有表格并重新创建一个新表格。`index`参数用于设置是否将DataFrame的索引列也写入到MySQL表格。如果设置为`True`,则索引列也会写入到表格。如果想要忽略索引列,可以设置为`False`。 以上就是使用PythonExcel导入MySQL的基本方法。需要注意的是,如果Excel文件包含大量的数据或者表格的列比较多,建议对数据进行适当处理,例如添加索引或者分批添加数据,以避免出现内存或性能问题。 ### 回答2: 使用PythonExcel导入MySQL可以通过以下几个步骤实现: 首先,需要安装Python的pandas库和MySQLdb库。可以使用pip命令进行安装。 其次,使用pandas读取Excel文件,并将其转换为DataFrame对象,可以使用以下代码进行读取: import pandas as pd data = pd.read_excel("data.xls") 将Excel的数据读取到data变量。 接着,连接MySQL数据库。可以使用MySQLdb库进行连接。以下是建立连接的代码示例: import MySQLdb db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="mydatabase") 在建立连接之后,需要获取到MySQL数据库的游标,以便在Python对MySQL进行操作。可以使用db.cursor()获取游标。 然后,可以通过DataFrame的to_sql()方法读取到的Excel的数据存储到MySQL。以下是将数据存储到MySQL的代码示例: data.to_sql(name="mytable", con=db, if_exists="append", index=False) 其,name指定存储至MySQL的表名,con指定数据库连接,if_exists指定进行插入操作时的处理方式,index=False表示不添加索引。 最后,关闭游标和数据库连接。可以使用以下代码: db.close() 这样,就可以使用PythonExcel导入MySQL。 ### 回答3: Python是一种脚本编程语言,可以用于快速处理各种数据。在数据处理和管理方面,Python有很大的优势,因为它支持许多库和框架,可以帮助开发人员自动化数据导入和导出。在此过程,使用PythonExcel文件导入MySQL数据库是一种常见的方法。下面是通过PythonExcel文件导入MySQL数据库的一些步骤: 步骤1:安装MySQL数据库和Python库 首先,需要安装MySQL数据库和Python的相关库。在安装MySQL之前,需要确定MySQL数据库服务器的名称,端口号,用户名和密码,以便在连接到数据库时正确配置连接参数。在Python库方面,通常使用openpyxl和pandas等库来读取和处理Excel文件。 步骤2:读取Excel文件 使用Python的openpyxl或pandas库可以读取Excel文件。这些库提供了各种函数来读取Excel文件并将其转换为Pandas数据帧。在读取Excel文件时,请确保Excel的数据是清洁和完整的。 步骤3:将Excel数据转换为MySQL格式 在将Excel文件的数据导入MySQL数据库之前,需要将Excel数据转换为MySQL数据格式。在这个步骤,需要识别每个Excel列的数据类型,并将其映射到MySQL数据表的适当列。在正确映射之后,可以将Excel数据表格保存为MySQL表格。 步骤4:将数据导入MySQL 一旦Excel数据已经转换为MySQL数据格式,便可以将其导入MySQL数据库。这可以使用Python的pymysql库来实现,使用该库可以在Python连接到MySQL数据库并执行SQL语句。 步骤5:验证数据 导入数据后,应对数据进行验证以确保正确性。在验证过程,请仔细查看MySQL表以确保它包含所有Excel数据和正确的格式。 总的来说,利用PythonExcel文件导入MySQL数据库是一种方便快捷的方法。尽管可能需要一些额外的时间和努力来设置和调试该过程,但是一旦配置完成并且正确运行,这将极大地提高数据处理和管理的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值