python读取大型Excel文件

python读取大型Excel文件

前言

python读取Excel文件的库有pandas、openpyxl、xlrd等,但是各有优缺点,虽说openpyxl在指定read_only参数后读取大型文件的速度非常快,但是它只适用于xlsx类型文件,且有些系统下载的报表不手动打开进行保存它都无法完整读取一行数据。最终基本都会使用pandas读取,也方便后期数据清洗。下面就主要针对pandas版本低于2.2时,无法通过直接指定engine='calamine',但是又想提升读取大型Excel的速度,那么还是可以用python-calamine库实现的,并且速度提升非常显著!

# 安装

pip install python-calamine

不指定engine参数,直接读取一个16万行的Excel,大概耗时18秒左右

a = time.time()

df = pd.read_excel(excel_path1, header=0)

print(df.head())

print(df.shape)

print(time.time() - a)

'''

编号 需求部门 需求名称 ... 单次运行时间(分钟).1 总运行时间(小时).1 是否达到业务要求.1

0 1 风险部 每日经营简报 ... 20.0 22.85 是

1 2 风险部 报表下载 ... 17.0 1.30 是

2 3 风险部 每日报表清单批量下载 ... 24.0 16.00 是

3 4 风险部 每月报表清单批量下载 ... 120.0 8.85 是

4 5 风险部 地区存贷款市场份额分析报告 ... 0.6 0.04 是

[5 rows x 17 columns]

(162000, 17)

18.343066215515137

'''

2.0

指定engine参数后的读取速度明显变快,速度提升大概75%以上

import pandas as pd

from python_calamine.pandas import pandas_monkeypatch

a = time.time()

pandas_monkeypatch()

df = pd.read_excel(excel_path1, header=0, engine='calamine')

print(df.head())

print(df.shape)

print(time.time() - a)

'''

编号 需求部门 需求名称 ... 单次运行时间(分钟).1 总运行时间(小时).1 是否达到业务要求.1

0 1 风险部 每日经营简报 ... 20.0 22.85 是

1 2 风险部 报表下载 ... 17.0 1.30 是

2 3 风险部 每日报表清单批量下载 ... 24.0 16.00 是

3 4 风险部 每月报表清单批量下载 ... 120.0 8.85 是

4 5 风险部 地区存贷款市场份额分析报告 ... 0.6 0.04 是

[5 rows x 17 columns]

(162000, 17)

4.306011199951172

'''

pandas<2.0

示例1

import pandas as pd

from python_calamine import CalamineWorkbook

wb = CalamineWorkbook.from_path(filename)

# sht_names = wb.sheet_names # 获取所有sheet名

# row_list = wb.get_sheet_by_name(sheet).to_python()

row_list = wb.get_sheet_by_index(0).to_python()

df = pd.DataFrame(row_list[1:], columns=row_list[0])

# df.reset_index(drop=True, inplace=True)

print(df.head())

print(df.shape)

"""

编号 需求部门 需求名称 ... 单次运行时间(分钟).1 总运行时间(小时).1 是否达到业务要求.1

0 1 风险部 每日经营简报 ... 20.0 22.85 是

1 2 风险部 报表下载 ... 17.0 1.30 是

2 3 风险部 每日报表清单批量下载 ... 24.0 16.00 是

3 4 风险部 每月报表清单批量下载 ... 120.0 8.85 是

4 5 风险部 地区存贷款市场份额分析报告 ... 0.6 0.04 是

[5 rows x 17 columns]

(162000, 17)

耗时:4.306011199951172

"""

示例2

生成器

import pandas as pd

from python_calamine import CalamineWorkbook

def iter_excel_calamine(file):

workbook = CalamineWorkbook.from_filelike(file)

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

yield row

tmp_list = []

with open(filename, "rb") as fh:

for row in iter_excel_calamine(fh):

tmp_list.append(row)

df = pd.DataFrame(tmp_list)

print(df.head())

print(df.shape)

"""

编号 需求部门 需求名称 ... 单次运行时间(分钟).1 总运行时间(小时).1 是否达到业务要求.1

0 1 风险部 每日经营简报 ... 20.0 22.85 是

1 2 风险部 报表下载 ... 17.0 1.30 是

2 3 风险部 每日报表清单批量下载 ... 24.0 16.00 是

3 4 风险部 每月报表清单批量下载 ... 120.0 8.85 是

4 5 风险部 地区存贷款市场份额分析报告 ... 0.6 0.04 是

[5 rows x 17 columns]

(162001, 17)

耗时:4.123789112378923

"""

相关推荐

热血江湖手游怎么拜师?拜师条件和步骤图文教程
穿越火线铁锹技巧解析,掌握后撤步与赏金令武器使用攻略
75%酒精湿巾怎么选?别被“含75%酒精”忽悠了!
青蛙的养殖技术,人工饲养必须从采卵孵化开始
红眼怒气战士科普 做一个合格的怒气战士