Excel 是办公场景中最常用的表格格式。pandas 通过 openpyxl(.xlsx)与 xlrd(.xls)等引擎读写 Excel 文件,支持多工作表、合并单元格与格式设置。


1. read_excel()

1.1 函数签名

pd.read_excel(
    io, sheet_name=0, header=0, names=None, index_col=None,
    usecols=None, dtype=None, engine=None, converters=None,
    true_values=None, false_values=None, skiprows=None, nrows=None,
    na_values=None, keep_default_na=True, verbose=False,
    parse_dates=False, date_parser=None, thousands=None,
    comment=None, skipfooter=0, storage_options=None
)

1.2 参数详解

参数说明
ioExcel 文件路径、URL、文件对象或 ExcelFile
sheet_name工作表名、位置索引(0 起始)或工作表名列表
header表头行号
names自定义列名
index_col索引列
usecols读取列:列名列表、位置列表、字符串范围(如 'A:C')或可调用对象
dtype列类型映射
engine引擎:'openpyxl'、'xlrd'(.xls)、'calamine'
converters列转换函数
true_values / false_values布尔识别值
skiprows跳过行数或行号列表
nrows只读取前 n 行
na_values缺失值集合
parse_dates日期解析
date_parser自定义日期解析函数
thousands千位分隔符
comment注释标识
skipfooter跳过末尾行
storage_options云存储

1.3 使用示例

import pandas as pd
 
# 默认读取第一个工作表
df = pd.read_excel('data.xlsx')
 
# 指定工作表:名称/位置/多个
df = pd.read_excel('data.xlsx', sheet_name='Sheet2')
df = pd.read_excel('data.xlsx', sheet_name=0)
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
 
# 读取所有工作表
all_sheets = pd.read_excel('data.xlsx', sheet_name=None)
 
# 只读取 A ~ C 列
df = pd.read_excel('data.xlsx', usecols='A:C')
 
# 指定跳过行与类型
df = pd.read_excel('data.xlsx', skiprows=2, dtype={'id': 'int32'})

2. to_excel()

2.1 函数签名

DataFrame.to_excel(
    excel_writer, sheet_name='Sheet1', na_rep='',
    float_format=None, columns=None, header=True, index=True,
    index_label=None, startrow=0, startcol=0, engine=None,
    merge_cells=True, encoding=None, inf_rep='inf', verbose=True,
    freeze_panes=None, storage_options=None
)

2.2 参数详解

参数说明
excel_writer文件路径或 ExcelWriter 对象
sheet_name工作表名
na_rep缺失值表示
float_format浮点格式
columns写出列
header是否写表头
index是否写索引
index_label索引列名
startrow起始行(从 0 开始)
startcol起始列(从 0 开始)
engine引擎('openpyxl'、'xlsxwriter')
merge_cells是否合并多级索引单元格
encoding编码
inf_rep无穷大表示
verbose详细输出
freeze_panes冻结窗格位置(如 (1, 0) 冻结首行)
storage_options云存储

2.3 使用示例

# 基本写出
df.to_excel('output.xlsx', index=False)
 
# 指定工作表与冻结窗格
df.to_excel('output.xlsx', sheet_name='报表', freeze_panes=(1, 0))
 
# 指定起始位置与列
df.to_excel('output.xlsx', startrow=2, startcol=1, columns=['A', 'B'])
 
# 写出多个 DataFrame 到同一文件的多个工作表
with pd.ExcelWriter('multi.xlsx') as writer:
    df1.to_excel(writer, sheet_name='销售', index=False)
    df2.to_excel(writer, sheet_name='库存', index=False)

3. ExcelFile

用于打开 Excel 文件并读取多个工作表,只解析一次文件,减少重复 IO。

# 直接创建
xls = pd.ExcelFile('data.xlsx')
print(xls.sheet_names)  # ['Sheet1', 'Sheet2']
 
# 读取指定工作表
df1 = xls.parse('Sheet1')
df2 = xls.parse(0)

ExcelFile 常用属性/方法

属性/方法说明
sheet_names所有工作表名
parse(sheet_name)读取指定工作表(支持所有 read_excel 参数)
book底层 openpyxl/xlrd 工作簿对象

兼容性提示

也可以使用上下文管理器:with pd.ExcelFile('data.xlsx') as xls: ... 并及时释放文件句柄。


4. ExcelWriter

ExcelWriter 用于将多个 DataFrame 写入同一个 Excel 文件,支持不同工作表与位置。

# 基础用法
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
    df1.to_excel(writer, sheet_name='表1', index=False)
    df2.to_excel(writer, sheet_name='表2', startrow=4)
    df3.to_excel(writer, sheet_name='表2', startcol=6)

ExcelWriter 常用参数

参数说明
path文件路径
engine'openpyxl'(.xlsx)、'xlsxwriter'(.xlsx)
mode'w'(覆盖)或 'a'(追加,需 openpyxl)
if_sheet_exists追加模式下工作表已存在时的处理:'error'、'new'、'replace'、'overlay'
date_format日期默认格式
datetime_format时间默认格式
# 追加写模式
with pd.ExcelWriter('output.xlsx', mode='a', if_sheet_exists='replace') as writer:
    df_new.to_excel(writer, sheet_name='新表', index=False)

依赖提示

  • .xlsx 文件默认使用 openpyxl:pip install openpyxl
  • .xls 文件默认使用 xlrd:pip install xlrd
  • 也可安装 calamine(pip install python-calamine)作为更快的解析引擎。

文档 6:4.5 二进制与列式格式.md