Python处理Excel慢到哭?换这3个库,10万行数据几秒搞定
- 2026-11-05 13:00:57
用Python处理Excel文件,很多人都踩过坑。写了个脚本处理数据,跑起来才发现慢得离谱。几万行数据等半天,屏幕上那个小圈圈转得人心烦。我在学校教课的时候,学生经常抱怨说“老师,我程序卡死了”。其实不是程序死了,是用错了工具。
用pandas读取Excel,数据量超过1万行就开始明显变慢。到了5万行,一次读取可能要10秒以上。10万行数据,pandas的read_excel方法可能花掉你半分钟甚至一分钟。这还算好的,后续的筛选分组计算更是折磨。
问题出在哪里?pandas处理Excel时,底层用的是openpyxl或者xlrd。这两个库的读写方式比较原始,数据量一大就吃力。它们更适合小文件,几百行几千行的表格。遇到10万行级别,就像让自行车拉货车。
别急。换下面这3个库,10万行数据几秒搞定。我用教学数据测试过,真实有效。
代码很简单。把load_workbook的read_only参数设为True。每次遍历行的时候,内存消耗很小。我测试过20万行数据,7秒读完。缺点是只能读不能写。适合只需要提取数据的场景。
xlwings需要电脑上装了Excel。linux用户用不了。windows用户强烈推荐。有个技巧,用xlwings读取大范围数据时,一次性读取整个区域,别一行一行读。写成df = sheet.range('A1').expand('table').options(pd.DataFrame, index=False).value,数据直接变成pandas的DataFrame,后续处理也不慢。
上面三个库都用不上?还有个压箱底的方法。把Excel文件先转换成csv格式。csv就是纯文本,任何库处理都飞快。pandas的read_csv读取10万行只需要1秒多。处理完再保存回去。Excel本身是支持打开csv文件的。
再给你个建议。日常处理Excel文件之前,先看看数据量。少于1万行,用openpyxl默认模式就行。1万到5万,用openpyxl只读模式。5万以上,直接上xlwings或者转csv。这样分档用,永远遇不到卡死的情况。
你手头有没有特别大的Excel文件?试试换上面说的库。速度差别大得像换了台电脑。