欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中讀取Excel最快的幾種常見方法

 更新時間:2024年10月17日 09:22:50   作者:Python_trys  
本文詳細介紹了使用Python讀取Excel文件的多種方法,介紹了pandas、openpyxl、xlrd、xlwt、pyexcel、Tablib、LibreOffice、DuckDB和Calamine等庫的用法和特點,每種方法適用于不同的場景,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在數(shù)據(jù)分析和處理的日常工作中,Excel文件是一種非常常見的數(shù)據(jù)存儲格式。Python,作為一種功能強大的編程語言,提供了多種庫來幫助用戶輕松讀取Excel文件。本文將介紹幾種使用Python讀取Excel文件的常見方法。

1. 使用pandas讀取Excel文件

pandas是Python數(shù)據(jù)分析領(lǐng)域中最受歡迎的庫之一,它提供了read_excel函數(shù)來直接讀取Excel文件。

import pandas as pd 
# 讀取Excel文件 
df = pd.read_excel('example.xlsx') 
# 顯示前幾行數(shù)據(jù) print(df.head())

這種方法簡單快捷,非常適合進行數(shù)據(jù)分析工作。pandas支持讀取.xls和.xlsx格式的文件,并且可以通過參數(shù)指定特定的工作表和單元格范圍。

2. 使用openpyxl讀取Excel文件

openpyxl是另一個強大的庫,專門用于讀寫.xlsx文件。與pandas不同,openpyxl允許用戶以更細粒度的方式操作Excel文件,例如讀取或編輯單元格格式。

from openpyxl import load_workbook
# 加載Excel文件
wb = load_workbook('example.xlsx')
# 選擇工作表
sheet = wb.active
# 讀取特定單元格的數(shù)據(jù)
cell_value = sheet['A1'].value
print(cell_value)

openpyxl是處理復(fù)雜Excel文件的理想選擇,比如需要讀取或設(shè)置單元格的格式、公式等。

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

對于較舊版本的.xls文件,xlrd和xlwt庫提供了讀取和寫入的功能。雖然它們不支持.xlsx格式的文件,但對于需要處理遺留數(shù)據(jù)的情況非常有用。

import xlrd
# 打開文件
workbook = xlrd.open_workbook('example.xls')
# 選擇工作表
sheet = workbook.sheet_by_index(0)
# 讀取特定單元格的內(nèi)容
cell_value = sheet.cell_value(0, 0)
print(cell_value)

盡管xlrd最新版本已經(jīng)限制了對.xlsx文件的支持,但它仍然是處理.xls文件的有效工具。

4. 使用pyexcel作為一個統(tǒng)一的接口

pyexcel提供了一個簡單的API來讀取、處理和寫入多種不同格式的Excel文件。如果你在尋找一個統(tǒng)一的接口來處理不同類型的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 中最流行的庫之一,用于導(dǎo)入和導(dǎo)出各種格式的數(shù)據(jù)。它最初是由流行requests庫的創(chuàng)建者開發(fā)的,因此其特點是同樣關(guān)注開發(fā)人員體驗和人體工程學(xué)。

安裝:

$ pip install tablib

代碼:

**import** tablib

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

只需一行代碼,該庫就能完成所有繁重的工作。

在繼續(xù)執(zhí)行基準(zhǔn)測試之前,我們先看看第一行的結(jié)果:

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具有一些額外的方法來重新排列字典順序。它是在內(nèi)置collections模塊中定義的,當(dāng)您請求字典時,它就是 tablib 返回的內(nèi)容。由于OrderedDict是 的子類dict并且它是在內(nèi)置模塊中定義的,因此我們不介意并認(rèn)為它足以滿足我們的目的。

6.使用 Openpyxl 讀取 Excel

Openpyxl是一個用 Python 讀寫 Excel 文件的庫。與 Tablib 不同,Openpyxl 僅專用于 Excel,不支持任何其他文件類型。

事實上,tablib和pandas在讀取 xlsx 文件時都在底層使用 Openpyxl。也許這種專業(yè)化會帶來更好的表現(xiàn)。

安裝:

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

這次我們要寫的代碼更多一些,讓我們來分解一下:

  • 從打開的文件中加載工作簿:函數(shù) load_workbook 同時支持文件路徑和可讀數(shù)據(jù)流。在本例中,我們對打開的文件進行操作。
  • 獲取活動工作表:Excel 文件可以包含多個工作表,我們可以選擇讀取哪個工作表。在本例中,我們只有一張工作表。
  • 構(gòu)建頁眉列表:Excel 文件的第一行包含頁眉。要將這些頁眉作為字典的鍵,我們需要讀取第一行并生成頁眉列表。
  • 返回結(jié)果:openpyxl 使用的單元格類型包含值和一些元數(shù)據(jù)。這對其他用途很有用,但我們只需要值。要訪問單元格的值,我們使用 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

我們現(xiàn)在已經(jīng)用盡了將 Excel 導(dǎo)入 Python 的傳統(tǒng)且顯而易見的方法。我們使用了頂級指定庫并獲得了不錯的結(jié)果?,F(xiàn)在是跳出框框思考的時候了。

LibreOffice是其他辦公套件的免費開源替代品。LibreOffice 可以處理 xls 和 xlsx 文件,并且還恰好包含帶有一些有用的命令行選項的無頭模式:

LibreOffice 命令行選項之一是在不同格式之間轉(zhuǎn)換文件。例如,我們可以使用 libreoffice 將 xlsx 文件轉(zhuǎn)換為 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 文件轉(zhuǎn)換為 CSV,然后將 CSV 導(dǎo)入 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))

讓我們來分析一下:

  • 創(chuàng)建一個用于存儲 CSV 文件的臨時目錄:使用內(nèi)置的 tempfile 模塊創(chuàng)建一個臨時目錄,完成后會自動清理。理想情況下,我們希望將特定文件轉(zhuǎn)換為內(nèi)存中的類文件對象,但 libreoffice 命令行不提供轉(zhuǎn)換為特定文件的方法,只能轉(zhuǎn)換為目錄。
  • 使用 libreoffice 命令行將文件轉(zhuǎn)換為 CSV:使用內(nèi)置子進程模塊執(zhí)行操作系統(tǒng)命令。
  • 讀取生成的 CSV:打開新創(chuàng)建的 CSV 文件,使用內(nèi)置的 csv 模塊進行解析并生成 dicts。

8.使用 DuckDB 讀取 Excel

如果我們已經(jīng)開始使用外部工具,為什么不給新人一個競爭的機會呢?
DuckDB是一個“進程內(nèi)SQL OLAP數(shù)據(jù)庫管理系統(tǒng)”。此描述并沒有立即說明為什么 DuckDB 在這種情況下有用,但確實如此。DuckDB 非常擅長移動數(shù)據(jù)和格式之間的轉(zhuǎn)換。

安裝:

$ 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 中導(dǎo)入數(shù)據(jù),需要安裝空間擴展。這有點奇怪,因為空間擴展用于地理操作,但這正是它想要的。
  • 查詢文件:直接使用 duckdb 全局變量執(zhí)行查詢時,默認(rèn)情況下會使用內(nèi)存數(shù)據(jù)庫,類似于使用 :memory: 選項的 sqlite。要實際導(dǎo)入 Excel 文件,我們使用 st_read 函數(shù),并將文件路徑作為第一個參數(shù)。在函數(shù)選項中,我們將第一行設(shè)置為標(biāo)題,并激活自動檢測類型的選項(這也是默認(rèn)選項)。
  • 構(gòu)建結(jié)果遍歷每一行,并使用每一行的標(biāo)題和值列表構(gòu)建 dict。

9.使用 Calamine 讀取 Excel

近年來,Python 中的每個性能問題似乎最終都用另一種語言來解決。作為一名 Python 開發(fā)人員,我認(rèn)為這是一個真正的祝福。這意味著我可以繼續(xù)使用我習(xí)慣的語言并享受所有其他語言的性能優(yōu)勢!

Calamine是一個純 Rust 庫,用于讀取 Excel 和 OpenDocument 電子表格文件。要安裝python-calamine爐甘石的 Python 綁定,請執(zhí)行以下命令:

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

性能總結(jié)

總結(jié)一下使用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文件的方法,每種方法都有其適用場景。對于數(shù)據(jù)分析師和開發(fā)者來說,選擇合適的庫可以極大地提高工作效率。
那么您應(yīng)該使用哪一個呢?這取決于…在選擇在 Python 中處理 Excel 文件的庫時,除了速度之外,還有一些其他考慮因素:

  • 寫入能力:我們對讀取 Excel 的方法進行了基準(zhǔn)測試,但有時也需要生成 Excel 文件。我們進行基準(zhǔn)測試的一些庫不支持寫入。例如 Calamine,不能寫入 Excel 文件,只能讀取。
  • 其他格式:系統(tǒng)可能需要加載和生成 Excel 以外的其他格式的文件。一些庫,例如 pandas 和 Tablib 支持多種附加格式,而 calamine 和 openpyxl 僅支持 Excel。

到此這篇關(guān)于Python中讀取Excel最快的幾種常見方法的文章就介紹到這了,更多相關(guān)Python讀取Excel最快方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 使用 Bert 進行中文情感分析的方法

    Python 使用 Bert 進行中文情感分析的方法

    在自然語言處理(NLP)領(lǐng)域,情感分析是一個非常常見且重要的應(yīng)用,本文將帶領(lǐng)新手使用 BERT 模型進行中文情感分析,并會詳細講解如何加載開源數(shù)據(jù)集、訓(xùn)練模型、評估準(zhǔn)確度,并最終導(dǎo)出模型供未來使用,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • django多文件上傳,form提交,多對多外鍵保存的實例

    django多文件上傳,form提交,多對多外鍵保存的實例

    今天小編就為大家分享一篇django多文件上傳,form提交,多對多外鍵保存的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python 多線程串行和并行的實例

    python 多線程串行和并行的實例

    今天小編就為大家分享一篇python 多線程串行和并行的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 用Python展示動態(tài)規(guī)則法用以解決重疊子問題的示例

    用Python展示動態(tài)規(guī)則法用以解決重疊子問題的示例

    這篇文章主要介紹了用Python展示動態(tài)規(guī)則法用以解決重疊子問題的一個棋盤游戲的示例,動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問題,且耗時間往往遠少于樸素解法,需要的朋友可以參考下
    2015-04-04
  • 淺談numpy數(shù)組中冒號和負(fù)號的含義

    淺談numpy數(shù)組中冒號和負(fù)號的含義

    下面小編就為大家分享一篇淺談numpy數(shù)組中冒號和負(fù)號的含義,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 在django中實現(xiàn)頁面倒數(shù)幾秒后自動跳轉(zhuǎn)的例子

    在django中實現(xiàn)頁面倒數(shù)幾秒后自動跳轉(zhuǎn)的例子

    今天小編就為大家分享一篇在django中實現(xiàn)頁面倒數(shù)幾秒后自動跳轉(zhuǎn)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python 實現(xiàn)過濾掉列表中唯一值

    Python 實現(xiàn)過濾掉列表中唯一值

    這篇文章主要介紹了Python 實現(xiàn)過濾掉列表中唯一值,文章內(nèi)容主要利用Python代碼實現(xiàn)過濾掉列表中的唯一值的功能,需要的朋友可以參考一下
    2021-11-11
  • python使用 cx_Oracle 模塊進行查詢操作示例

    python使用 cx_Oracle 模塊進行查詢操作示例

    這篇文章主要介紹了python使用 cx_Oracle 模塊進行查詢操作,結(jié)合實例形式分析了Python使用cx_Oracle模塊進行數(shù)據(jù)庫的基本連接、查詢、輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python表示矩陣的方法分析

    Python表示矩陣的方法分析

    這篇文章主要介紹了Python表示矩陣的方法,結(jié)合具體實例形式分析了Python表示矩陣的方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-05-05
  • Python中計算相似度的方法詳解

    Python中計算相似度的方法詳解

    計算相似度是許多機器學(xué)習(xí)和數(shù)據(jù)分析任務(wù)中的重要步驟,尤其是在推薦系統(tǒng)、文本分析和圖像處理等領(lǐng)域,下面我們就來看看具體的實現(xiàn)方法吧
    2025-02-02

最新評論