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 参数详解
| 参数 | 说明 |
|---|---|
io | Excel 文件路径、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