使用 pandas.ExcelFile 读取 Excel 文件

pandas.ExcelFile 是一个用于高效读取 Excel 文件的类,特别适合需要多次操作同一文件的情况。它支持 .xls.xlsx 格式。

初始化 ExcelFile 对象

import pandas as pd
excel_file = pd.ExcelFile('path_to_file.xlsx')

查看 Excel 文件的工作表名称

使用 sheet_names 属性可以获取文件中所有工作表的名称列表。

sheet_names = excel_file.sheet_names
print(sheet_names)  # 输出: ['Sheet1', 'Sheet2', ...]

读取特定工作表的数据

通过 parse() 方法读取指定工作表的数据为 DataFrame。可以指定工作表名称或索引。

# 通过名称读取
df1 = excel_file.parse('Sheet1')

# 通过索引读取
df2 = excel_file.parse(0)  # 读取第一个工作表

指定读取参数

parse() 方法支持与 pd.read_excel() 相同的参数,例如跳过行、选择列等。

df = excel_file.parse(
    'Sheet1',
    skiprows=2,          # 跳过前两行
    usecols='A:C',       # 只读取 A 到 C 列
    na_values=['NA'],    # 将 'NA' 识别为缺失值
)

跳过指定行则可以对skiprows进行修改

skiprows = lambda x: x!=0 and condition 1 :

skiprows的常见用法有以下几种:

传入整数 n:跳过前 n
例如skiprows=2 表示跳过前 2 行,从第 3 行开始读取数据。
传入列表 / 数组:跳过指定行号的行
行号从 0 开始计数,例如 skiprows=[0, 2, 4] 表示跳过第 1 行、第 3 行、第 5 行(索引为 0、2、4 的行)。
传入函数:通过函数判断是否跳过行
函数接收行号(从 0 开始)作为参数,返回 True 则跳过该行,False 则保留。
例如 skiprows=lambda x: x in [0, 2] 表示跳过第 1 行和第 3 行。

处理多工作表文件

对于包含多个工作表的文件,可以遍历所有工作表并处理数据。

for sheet_name in excel_file.sheet_names:
    df = excel_file.parse(sheet_name)
    print(f"Processing {sheet_name}:")
    print(df.head())

关闭文件资源

虽然 ExcelFile 会在垃圾回收时自动关闭文件,但显式关闭可以及时释放资源。

excel_file.close()

使用上下文管理器

通过 with 语句管理文件资源,确保文件正确关闭。

with pd.ExcelFile('path_to_file.xlsx') as excel_file:
    df = excel_file.parse('Sheet1')

性能优势

对于需要多次读取同一文件的情况,ExcelFile 只需加载一次文件,比多次调用 pd.read_excel() 更高效。

# 低效方式:多次读取同一文件
df1 = pd.read_excel('file.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('file.xlsx', sheet_name='Sheet2')

# 高效方式:使用 ExcelFile 只加载一次
excel_file = pd.ExcelFile('file.xlsx')
df1 = excel_file.parse('Sheet1')
df2 = excel_file.parse('Sheet2')

支持的文件格式

ExcelFile 支持以下文件格式:

  • .xls (Excel 2003 及更早版本)
  • .xlsx (Excel 2007 及更高版本)
  • .xlsm (启用宏的 Excel 文件)
  • .ods (OpenDocument 表格)

更多推荐