使用 pandas (最推荐)
pandas 是 Python 数据分析的核心库,它提供了非常简洁和高效的方式来处理表格数据,包括 Excel 文件,这是绝大多数情况下的首选。

安装 pandas 和 openpyxl
pandas 本身不直接处理 Excel 文件,它依赖于其他引擎。openpyxl 是一个常用的引擎,用于处理 .xlsx 格式。
pip install pandas openpyxl
基本用法
读取整个工作表
使用 pandas.read_excel() 函数,它会返回一个 DataFrame 对象,你可以像操作列表一样操作它。
import pandas as pd # 指定 Excel 文件路径 file_path = 'your_data.xlsx' # 读取第一个工作表(默认) df = pd.read_excel(file_path) # 打印整个 DataFrame print(df)
按行读取数据
DataFrame 的行数据可以通过 .iterrows() 方法进行迭代。.iterrows() 会返回每一行的索引和包含该行所有数据的 Series 对象。
import pandas as pd
file_path = 'your_data.xlsx'
df = pd.read_excel(file_path)
print("--- 使用 iterrows() 按行迭代 ---")
for index, row in df.iterrows():
# index 是行的索引 (0, 1, 2, ...)
# row 是一个 Pandas Series 对象,包含了该行的所有数据
print(f"行索引: {index}")
print(f"行数据: {row.to_dict()}") # 将 Series 转换为字典方便查看
print("-" * 20)
获取特定行 你可以通过索引来获取特定的行。

import pandas as pd
file_path = 'your_data.xlsx'
df = pd.read_excel(file_path)
# 获取第 2 行 (索引为 1)
first_row = df.iloc[1]
print("第 2 行的数据:")
print(first_row)
# 获取第 2 行到第 4 行 (索引为 1 到 3)
some_rows = df.iloc[1:4]
print("\n第 2 行到第 4 行的数据:")
print(some_rows)
读取指定的工作表
一个 Excel 文件可以包含多个工作表,你可以通过 sheet_name 参数来指定读取哪个。
import pandas as pd
file_path = 'your_data.xlsx'
# 读取名为 "Sheet2" 的工作表
df_sheet2 = pd.read_excel(file_path, sheet_name='Sheet2')
# 读取第二个工作表(索引从 0 开始)
df_sheet1_by_index = pd.read_excel(file_path, sheet_name=1)
print("从 'Sheet2' 读取的数据:")
print(df_sheet2)
使用 openpyxl
openpyxl 是一个更底层的库,它允许你直接操作 Excel 文件的内部结构,如果你需要对 Excel 进行更复杂的操作,比如修改样式、合并单元格等,openpyxl 会更灵活。
安装 openpyxl
pip install openpyxl
基本用法
加载工作簿和工作表 首先需要加载整个工作簿,然后选择要操作的工作表。
from openpyxl import load_workbook file_path = 'your_data.xlsx' # 加载工作簿 # data_only=True 表示读取单元格的值,而不是公式 wb = load_workbook(filename=file_path, data_only=True) # 选择第一个工作表 ws = wb.active # 或者按名称选择工作表 # ws = wb['Sheet1']
按行迭代读取
openpyxl 将工作表的行表示为一个可迭代对象,每一行又是一个由 Cell 对象组成的元组。

from openpyxl import load_workbook
file_path = 'your_data.xlsx'
wb = load_workbook(filename=file_path, data_only=True)
ws = wb.active
print("--- 使用 openpyxl 按行迭代 ---")
# ws.iter_rows() 会返回一个生成器,每次产生一行
for row in ws.iter_rows(values_only=True): # values_only=True 直接获取单元格的值
# row 是一个元组,包含该行所有单元格的值
print(row)
访问特定单元格和行 你可以通过行和列的索引来精确访问数据。
from openpyxl import load_workbook
file_path = 'your_data.xlsx'
wb = load_workbook(filename=file_path, data_only=True)
ws = wb.active
# 获取 A1 单元格的值
cell_a1 = ws['A1'].value
print(f"A1 单元格的值是: {cell_a1}")
# 获取第 2 行的所有数据
row_2 = []
for cell in ws[2]: # 直接访问行
row_2.append(cell.value)
print(f"第 2 行的数据是: {row_2}")
# 获取从第 2 行到第 4 行的数据
print("\n从第 2 行到第 4 行的数据:")
for row in ws.iter_rows(min_row=2, max_row=4, values_only=True):
print(row)
使用 xlrd (仅适用于旧版 .xls 格式)
xlrd 是一个专门用于读取 .xls (Excel 97-2003) 格式的库。注意:它不支持 .xlsx 格式,对于新格式,请使用 openpyxl。
安装 xlrd
pip install xlrd
基本用法
import xlrd
file_path = 'your_old_data.xls' # 必须是 .xls 文件
# 打开工作簿
workbook = xlrd.open_workbook(file_path)
# 获取第一个工作表
sheet = workbook.sheet_by_index(0)
# 获取总行数和总列数
num_rows = sheet.nrows
num_cols = sheet.ncols
print(f"工作表有 {num_rows} 行, {num_cols} 列")
# 按行迭代
print("\n--- 使用 xlrd 按行迭代 ---")
for row_idx in range(num_rows):
row_data = []
for col_idx in range(num_cols):
# cell_value(row, col) 获取指定单元格的值
cell_value = sheet.cell_value(row_idx, col_idx)
row_data.append(cell_value)
print(f"第 {row_idx + 1} 行: {row_data}")
总结与对比
| 特性 | pandas |
openpyxl |
xlrd |
|---|---|---|---|
| 主要用途 | 数据分析、数据处理 | Excel 文件操作(读、写、改) | 仅读取旧版 Excel (.xls) |
| 易用性 | 非常高,语法简洁,功能强大 | 中等,需要理解 Excel 对象模型 | 简单,但功能有限 |
| 数据格式 | 返回 DataFrame,便于后续分析 |
返回 Cell 对象或值,可直接操作 |
返回单元格的值 |
| 写入支持 | 支持 | 支持,功能强大 | 不支持 |
| 推荐场景 | 绝大多数情况,特别是当你需要对数据进行计算、筛选、统计时。 | 需要精细控制 Excel 样式、图表、公式等,或者读写混合操作时。 | 只需要读取老旧的 .xls 文件时。 |
最终建议
- 如果你只是想读取 Excel 数据并进行处理、分析或转换,请毫不犹豫地选择
pandas,它是最快、最高效、最符合 Python 数据分析生态的选择。 - 如果你需要在读取数据的同时修改 Excel 文件(比如改变字体颜色、添加边框、写入新数据等),
openpyxl是你的不二之选。 - 如果你的文件是古老的
.xls格式,那么只能使用xlrd。
