乐于分享
好东西不私藏

Python 读取 Excel 常用的 8 种方法

Python 读取 Excel 常用的 8 种方法

很多朋友反映 Python 读取 Excel 速度慢、报错多,其实是方法没选对。本文整理了 8 种常见的读取方式,从基础到进阶,帮你找到最适合自己场景的方案。


一、为什么读取 Excel 会”慢”?

在正式介绍方法之前,先说清楚原因:

  • .xlsx 格式是 XML 压缩包,解析开销大
  • 默认引擎(openpyxl)对大文件不友好
  • 读取了不必要的列和行,浪费时间
  • 没有利用并行或缓存机制

换对方法,速度可以提升 5~50 倍


二、8 种读取方法详解

方法 1:pandas.read_excel(最常用)

最基础的读取方式,适合日常中小型文件。

import pandas as pd

# 基础用法
df = pd.read_excel("data.xlsx")

# 常用参数
df = pd.read_excel(
"data.xlsx",
    sheet_name="Sheet1",   # 指定 Sheet 名,默认读第一个
    header=0,              # 第几行作为列名
    index_col=None,        # 指定索引列
    usecols="A:D",         # 只读取 A 到 D 列(省时省内存)
    nrows=1000,            # 只读取前 1000 行
    skiprows=[01],       # 跳过指定行
    dtype={"id": str}      # 指定列的数据类型
)

💡 技巧usecols 和 nrows 是提速的关键参数,按需读取可节省大量时间。


方法 2:指定 engine 引擎(提速关键)

read_excel 支持多种引擎,不同场景选不同引擎性能差异巨大。

# openpyxl:默认,支持 .xlsx,功能全但较慢
df = pd.read_excel("data.xlsx", engine="openpyxl")

# xlrd:只支持 .xls 旧格式,速度快
df = pd.read_excel("data.xls", engine="xlrd")

# calamine:速度最快,推荐大文件使用
# pip install python-calamine
df = pd.read_excel("data.xlsx", engine="calamine")

速度对比(10万行数据):

引擎
耗时
openpyxl
~8s
xlrd
~3s
calamine
~1.2s

💡 推荐:大文件优先尝试 calamine,速度提升最明显。


方法 3:读取多个 Sheet

# 读取所有 Sheet,返回字典 {sheet名: DataFrame}
all_sheets = pd.read_excel("data.xlsx", sheet_name=None)

for name, df in all_sheets.items():
    print(f"Sheet: {name}, 行数: {len(df)}")

# 读取指定多个 Sheet
sheets = pd.read_excel("data.xlsx", sheet_name=["销售数据""库存数据"])
df_sale  = sheets["销售数据"]
df_stock = sheets["库存数据"]

方法 4:openpyxl 直接操作(精细控制)

当你需要读取格式、颜色、公式等信息时,直接使用 openpyxl。

from openpyxl import load_workbook

wb = load_workbook("data.xlsx", read_only=True, data_only=True)
ws = wb.active  # 获取当前激活的 Sheet

# 遍历所有行
for row in ws.iter_rows(min_row=2, values_only=True):
    print(row)

# 读取单元格
value = ws["B2"].value
print(value)

wb.close()

💡 read_only=True 模式内存占用更小,适合只读场景。


方法 5:xlwings 读取(支持公式计算结果)

openpyxl 读取的是公式文本,xlwings 可以读取 Excel 实际计算后的结果。

# pip install xlwings
import xlwings as xw

app = xw.App(visible=False)
wb = xw.Book("data.xlsx")
ws = wb.sheets["Sheet1"]

# 读取区域数据为列表
data = ws.range("A1:D100").value

# 转为 DataFrame
df = pd.DataFrame(data[1:], columns=data[0])

wb.close()
app.quit()

⚠️ xlwings 需要本机安装 Excel,适合 Windows/Mac 环境。


方法 6:使用 polars 读取(超大文件首选)

polars 是比 pandas 更快的数据处理库,读取大 Excel 文件表现出色。

# pip install polars fastexcel
import polars as pl

df = pl.read_excel("data.xlsx", sheet_name="Sheet1")

# 转为 pandas 继续使用
df_pd = df.to_pandas()

💡 对于百万行级别的 Excel,polars 速度比 pandas 快 3~10 倍。


方法 7:分块读取大文件

当内存不足时,分块读取是最稳妥的方案。

import pandas as pd

# 方法一:通过 skiprows + nrows 分批读取
chunk_size = 10000
chunks = []

for i in range(0100000, chunk_size):
    chunk = pd.read_excel(
"large_data.xlsx",
        skiprows=range(1, i + 1),  # 跳过已读行(保留表头行0)
        nrows=chunk_size
    )
    chunks.append(chunk)

df = pd.concat(chunks, ignore_index=True)

💡 更推荐:将 xlsx 先转为 csv,再用 pd.read_csv(chunksize=...) 分块读取,性能更好。


方法 8:Excel 转 CSV 再读取(最快方案)

对于超大 Excel 文件,最快的方式是先转 CSV,再用 pandas 读取 CSV。

import subprocess
import pandas as pd

# 方式1:使用 libreoffice 转换(需安装)
subprocess.run([
"libreoffice""--headless""--convert-to""csv",
"data.xlsx""--outdir""./"
])
df = pd.read_csv("data.csv")

# 方式2:用 openpyxl 导出 CSV
from openpyxl import load_workbook
import csv

wb = load_workbook("data.xlsx", read_only=True)
ws = wb.active

with open("data.csv""w", newline="", encoding="utf-8"as f:
    writer = csv.writer(f)
for row in ws.iter_rows(values_only=True):
        writer.writerow(row)

df = pd.read_csv("data.csv")

三、场景选择指南

场景
推荐方案
普通中小文件(<5万行)
pd.read_excel()

 + calamine 引擎
需要读取多个 Sheet
sheet_name=None

 一次性读取
需要读取公式结果
xlwings
需要操作格式/颜色
openpyxl 直接操作
大文件(>10万行)
polars 或先转 CSV
内存受限场景
分块读取

四、完整加速示例

import pandas as pd
import time

file = "large_data.xlsx"

# 慢的写法
t1 = time.time()
df = pd.read_excel(file)
print(f"默认读取: {time.time()-t1:.2f}s")

# 快的写法
t2 = time.time()
df = pd.read_excel(
    file,
    engine="calamine",          # 换引擎
    usecols=["日期","金额","类别"],  # 只读需要的列
    dtype={"金额""float32"}   # 指定类型减少转换开销
)
print(f"优化读取: {time.time()-t2:.2f}s")

以上就是 Python 读取 Excel 最常用的 8 种方法。核心原则只有一条:按需读取,选对引擎。希望对你有帮助,欢迎点赞收藏!

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Python 读取 Excel 常用的 8 种方法

评论 抢沙发

8 + 3 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮