Python pandas读取Excel指定列:usecols参数用法详解

Aria
Aria
发布时间:2026-10-10 | 2人浏览过
原创

在日常数据处理与分析工作中,Excel 表格往往包含数十甚至上百列字段,但实际业务分析往往仅需其中的三到五列关键数据。如果直接调用 pandas.read_excel() 进行全表读取,解析引擎不仅会将大量无关列读入内存,还会极大拉长文件 I/O 与数据转换的等待时间。usecols 参数正是解决这一问题的核心配置。本文将系统梳理 usecols 的四种传参方式、执行逻辑、落地步骤以及常见异常排查,帮助读者以更轻量、高效的方式读取 Excel 数据。

Python pandas读取Excel指定列:usecols参数用法详解
图 1:Excel 全量载入与 usecols 指定列读取的底层开销对比

一、usecols 参数的四种传参形式

usecols 参数支持四种不同类型的数据输入:字符串列表、整数列表、Excel 字母范围字符串以及 Callable(可调用函数)。每种方式对应不同的业务场景与数据规范。

Python pandas读取Excel指定列:usecols参数用法详解
图 2:usecols 参数四种输入格式及技术特性总览

1. 方式一:列名列表(字符串列表)

最常见也最稳妥的方式是直接传入目标列名称组成的列表。即使 Excel 原始表格中调整了列的先后排列顺序,该方式依然能精确获取指定列。

import pandas as pd

# 按列名读取三个目标列
df = pd.read_excel(
    'sales_data.xlsx',
    usecols=['订单编号', '销售日期', '成交金额']
)

print(df.head())

2. 方式二:列位置索引(整数列表)

当表格没有设置表头,或者表头命名极不规范(如包含复杂公式或随机乱码)时,可以使用从 0 开始计数的整数索引列表。

import pandas as pd

# 读取第 1 列 (0)、第 2 列 (1) 和第 5 列 (4)
df = pd.read_excel(
    'sales_data.xlsx',
    usecols=[0, 1, 4]
)

print(df.columns)

3. 方式三:Excel 列字母区间字符串

在与业务人员沟通时,对方往往直接标注“提取 A 到 D 列以及 G 列”。pandas 支持直接以逗号分隔的 Excel 列字母格式进行传参,包含单个字母或用冒号连接的闭区间。

import pandas as pd

# 读取 A到C列(连续)以及单独的 E 列
df = pd.read_excel(
    'sales_data.xlsx',
    usecols='A:C, E'
)

print(df.shape)

注意:字符串中的字母区间属于闭区间。例如 'A:C' 会完整包含 A、B、C 三列;多个区间或单列之间使用英文逗号分隔。

4. 方式四:可调用函数(Callable / Lambda)

对于含有上百个指标的超宽表格,如果需要提取所有包含特定关键词(如“Q3”或“金额”)的列,可以向 usecols 传递一个返回布尔值的函数。pandas 在解析表头时会将每个列名依次传入该函数,仅保留返回值为 True 的列。

import pandas as pd

# 动态读取包含“编号”或“金额”的所有字段
df = pd.read_excel(
    'sales_data.xlsx',
    usecols=lambda col: any(kw in str(col) for kw in ['编号', '金额'])
)

print(df.columns.tolist())

二、标准操作流程与实战步骤

为了确保在生产环境中稳定读取指定列并避免列名不匹配导致的异常中断,建议遵循以下四个标准操作步骤。

Python pandas读取Excel指定列:usecols参数用法详解
图 3:基于 usecols 的数据处理落地四步流程

下面是一个完整的生产级脚本模板,演示了从轻量勘查表头到定向读取的完整过程:

import pandas as pd

excel_path = 'company_annual_report.xlsx'

# 步骤 1:仅读取前 2 行探查真实表头,避免直接加载数百万单元格
preview_df = pd.read_excel(excel_path, nrows=2)
print("探测到的原始字段:", preview_df.columns.tolist())

# 步骤 2 & 3:明确指定所需字段并执行轻量读取
target_cols = ['部门名称', '年度预算', '实际支出']
df = pd.read_excel(
    excel_path,
    usecols=target_cols,
    engine='openpyxl'  # 显式声明解析引擎
)

# 步骤 4:验证读取成果及内存状态
print("成功载入数据维度:", df.shape)
print("实际载入列:", df.columns.tolist())
df.info(memory_usage='deep')

三、常见问题与避坑要点

在实际使用 usecols 时,开发者常遇到列名不存在、空列或者索引混乱等问题。理解底层机制有助于迅速定位原因。

1. 隐蔽空格引发 KeyError 或空数据

在人工维护的 Excel 表格中,表头单元格极易附带看不见的空格(例如 '订单号 ' 或 ' 客户名称')。如果 usecols=['订单号', '客户名称'],pandas 会因为字符串不完全等价而报错抛出 KeyError 或 ValueError: Usecols do not match columns。

解决方案:当怀疑表头包含脏空格时,可先通过函数去除空格后过滤,或者先勘查规范表头:

# 自动去除列名两端空格后再匹配
clean_cols = ['订单号', '客户名称']
df = pd.read_excel(
    'data.xlsx',
    usecols=lambda c: str(c).strip() in clean_cols
)

2. header 参数与 usecols 的协作关系

Excel 表格的前几行可能包含标题或注释,真实表头往往位于第 2 行或第 3 行。此时必须配合 header 参数(例如 header=1)。usecols 的列名匹配将在 header 指定的行上执行,而非默认的第 0 行。

3. 字母范围只支持纯字母坐标

传入字符串范围如 'A:D' 时,切勿混入行号(例如写成 'A1:D10' 会导致解析失败)。pandas 内部通过正则解析纯列字母,如需限定行数应配合 skiprows 与 nrows 参数。

Python pandas读取Excel指定列:usecols参数用法详解
图 4:usecols 参数决策路径与避坑全景图

四、总结

掌握 pandas.read_excel 的 usecols 参数是编写高效、稳健数据管道的基础技能。在大多数固定格式的商业报表中,优先使用明确的列名列表可以提供极佳的代码可读性与防错韧性;而在面对无表头文件、连续大宽表或多条件模糊检索时,整数索引、字母范围和 Callable 函数则提供了极高的灵活性。在日常开发中,坚持“先预览结构、后指定列读取”的习惯,能够显著降低内存占用并大幅提升数据载入吞吐量。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表