gpt4 book ai didi

python - 如何加快导入大型 xlsx 文件的速度?

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:08 24 4
gpt4 key购买 nike

我想处理一个 200MB 的大型 Excel (xlsx) 文件,其中包含 15 个工作表和 100 万行,每行 5 列)并根据数据创建一个 pandas 数据框。 Excel 文件的导入速度极慢(最多 10 分钟)。不幸的是,Excel 导入文件格式是强制性的(我知道 csv 更快......)。

如何加快将大型 Excel 文件导入 pandas 数据框的过程?如果可能的话,将时间缩短到 1-2 分钟左右会很棒,这样会更容易忍受。

到目前为止我尝试了什么:

选项 1 - Pandas I/O read_excel

%%timeit -r 1
import pandas as pd
import datetime

xlsx_file = pd.ExcelFile("Data.xlsx")
list_sheets = []

for sheet in xlsx_file.sheet_names:
list_sheets.append(xlsx_file.parse(sheet, header = 0, dtype={
"Sales": float,
"Client": str,
"Location": str,
"Country": str,
"Date": datetime.datetime
}).fillna(0))

output_dataframe = pd.concat(list_sheets)

10min 44s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

选项 2 - Dask

%%timeit -r 1
import pandas as pd
import dask
import dask.dataframe as dd
from dask.delayed import delayed

excel_file = "Data.xlsx"

parts = dask.delayed(pd.read_excel)(excel_file, sheet_name=0)
output_dataframe = dd.from_delayed(parts)

10min 12s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

选项 3 - openpyxl 和 csv

在通过 read_csv

将 csv 文件导入 pandas 数据框之前,仅从 Excel 工作簿创建单独的 csv 文件就需要大约 10 分钟
%%timeit -r 1
import openpyxl
import csv

from openpyxl import load_workbook
wb = load_workbook(filename = "Data.xlsx", read_only=True)

list_ws = wb.sheetnames
nws = len(wb.sheetnames) #number of worksheets in workbook

# create seperate csv files from each worksheet (15 in total)
for i in range(0, nws):
ws = wb[list_ws[i]]
with open("output/%s.csv" %(list_ws[i].replace(" ","")), "w", newline="") as f:
c = csv.writer(f)
for r in ws.rows:
c.writerow([cell.value for cell in r])

9min 31s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

我在单机 (Windows 10)、16GB RAM、8 核 (i7-8650U CPU @ 1.90GHz) 上使用 Python 3.7.3(64 位)。我在我的 IDE (Visual Studio Code) 中运行代码。

最佳答案

压缩不是瓶颈,问题是在 Python 中解析 XML 和创建新的数据结构。从您引用的速度来看,我假设这些文件非常大:有关更多详细信息,请参阅文档中有关性能的说明。 xlrd 和 openpyxl 的运行都接近底层 Python 和 C 库的极限。

从 openpyxl 2.6 开始,您在读取单元格时确实有 values_only 选项,这会加快速度。您还可以使用具有只读模式的多个进程来并行读取工作表,如果您有多个处理器,这应该会加快速度。

关于python - 如何加快导入大型 xlsx 文件的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com