read_excel() 函数可以读取 .xlsx、.xls 等格式,并支持多工作表、指定数据类型等高级功能。
读取 Excel 文件需要额外的引擎支持,首次使用前请安装以下库:
# 对于 .xlsx 文件(推荐)
pip install openpyxl
# 对于旧版 .xls 文件
pip install xlrd
安装后,Pandas 会自动选择合适的引擎。
import pandas as pd
# 读取第一个工作表
df = pd.read_excel('data.xlsx')
print(df.head())
# 也可以指定工作表名
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
read_excel() 提供了丰富的参数,与 read_csv() 类似,但增加了工作表相关的选项。
sheet_name指定要读取的工作表。可以是工作表名称(字符串)、位置索引(从0开始)或工作表名称列表。
pd.read_excel('data.xlsx', sheet_name=0) # 第一个工作表
pd.read_excel('data.xlsx', sheet_name='Sheet2') # 名为Sheet2的工作表
pd.read_excel('data.xlsx', sheet_name=[0, 'Sheet3']) # 返回字典,键为工作表名
header指定作为列名的行号(从0开始)。默认为0(第一行)。若数据无表头,设置 header=None,并用 names 指定列名。
pd.read_excel('data.xlsx', header=None, names=['A','B','C'])
names自定义列名,需配合 header=None 使用或用于替换原有列名。
pd.read_excel('data.xlsx', names=['ID','Name','Age'])
index_col指定某列作为行索引。可以是列号(整数)或列名(字符串)。
pd.read_excel('data.xlsx', index_col=0)
usecols指定要读取的列。可以是列号列表、列名列表,或Excel列范围字符串如 "A:C"。
pd.read_excel('data.xlsx', usecols=[0, 2])
pd.read_excel('data.xlsx', usecols=['Name','Age'])
pd.read_excel('data.xlsx', usecols="A:C")
dtype为列指定数据类型,避免自动推断错误。
pd.read_excel('data.xlsx', dtype={'ID': str, 'Salary': float})
skiprows跳过指定行数或行号列表。
pd.read_excel('data.xlsx', skiprows=2) # 跳过前两行
pd.read_excel('data.xlsx', skiprows=[0,2]) # 跳过第1行和第3行
nrows只读取前 n 行,适用于快速预览。
pd.read_excel('data.xlsx', nrows=100)
na_values指定额外的缺失值标记。
pd.read_excel('data.xlsx', na_values=['NA', 'NULL', '-'])
converters对指定列应用自定义转换函数。
pd.read_excel('data.xlsx', converters={'Age': lambda x: int(x)})
parse_dates将指定的列解析为日期类型。
pd.read_excel('data.xlsx', parse_dates=['Birthday'])
engine手动指定引擎:'openpyxl'(.xlsx)、'xlrd'(.xls)、'odf'(.ods)等。
pd.read_excel('data.xls', engine='xlrd')
当 sheet_name 参数传入列表或为 None 时,返回一个包含多个DataFrame的字典,键为工作表名。
# 读取所有工作表
sheets = pd.read_excel('data.xlsx', sheet_name=None) # 返回字典
print(sheets.keys()) # 所有工作表名
# 读取指定几个工作表
sheets = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet3'])
df_sheet1 = sheets['Sheet1']
假设我们有一个 sales.xlsx 文件,包含两个工作表:
日期、产品、销售额日期、产品、销售额、备注import pandas as pd
# 1. 读取2023工作表,指定日期列解析为日期,产品列作为行索引
df2023 = pd.read_excel('sales.xlsx', sheet_name='2023',
parse_dates=['日期'], index_col='产品')
print(df2023.head())
# 2. 读取2024工作表,只读取产品、销售额两列,并将备注中的'NULL'视为缺失
df2024 = pd.read_excel('sales.xlsx', sheet_name='2024',
usecols=['产品', '销售额', '备注'],
na_values={'备注': ['NULL', '']})
print(df2024.info())
# 3. 读取所有工作表,并查看每个工作表的形状
all_sheets = pd.read_excel('sales.xlsx', sheet_name=None)
for name, df in all_sheets.items():
print(f"{name}: {df.shape}")
ImportError 提示缺少 openpyxl 或 xlrd 时,按上文安装对应库即可。
converters 自定义解析。
usecols),或使用 nrows 限制行数。
fillna(method='ffill') 等方式处理。
dtype=str 先读取所有列为字符串,再按需转换。