杰瑞科技汇

Python如何读取Excel文件?

使用 pandas (最推荐)

pandas 是一个数据分析库,它将 Excel 文件读入一个叫做 DataFrame 的数据结构中,这个结构非常方便进行后续的数据处理、分析和可视化。

Python如何读取Excel文件?-图1
(图片来源网络,侵删)

安装 pandas

如果你还没有安装 pandas,可以通过 pip 安装:

pip install pandas

安装 Excel 引擎

pandas 本身不直接处理 Excel 文件,它依赖于底层的引擎。.xlsx 文件(较新格式)通常使用 openpyxl 引擎,而 .xls 文件(较旧格式)通常使用 xlrd 引擎。

# 用于读取 .xlsx 文件
pip install openpyxl
# 用于读取 .xls 文件 (xlrd 2.0+ 版本只读,不支持写入)
pip install xlrd

读取 Excel 文件的基本用法

假设你有一个名为 data.xlsx 的文件,内容如下:

姓名 年龄 城市
张三 25 北京
李四 30 上海
王五 28 广州

示例代码:

Python如何读取Excel文件?-图2
(图片来源网络,侵删)
import pandas as pd
# 文件路径
file_path = 'data.xlsx'
# 使用 pandas 读取 Excel 文件
# 默认读取第一个工作表
df = pd.read_excel(file_path)
# 打印 DataFrame 的前5行
print("读取前5行数据:")
print(df.head())
# 打印 DataFrame 的基本信息
print("\nDataFrame 的基本信息:")
print(df.info())
# 访问某一列
print("\n访问'姓名'这一列:")
print(df['姓名'])
# 访问某一行
print("\n访问第2行数据:")
print(df.iloc[1]) # iloc 用于基于整数位置的索引

高级用法

a) 指定工作表 (Sheet)

一个 Excel 文件可以包含多个工作表,你可以通过 sheet_name 参数来指定读取哪个工作表。

# 读取名为 'Sheet2' 的工作表
df_sheet2 = pd.read_excel('data.xlsx', sheet_name='Sheet2')
# 读取第二个工作表 (索引从0开始)
df_sheet_index1 = pd.read_excel('data.xlsx', sheet_name=1)
# 读取所有工作表,返回一个字典
# 键是工作表名,值是对应的 DataFrame
all_sheets = pd.read_excel('data.xlsx', sheet_name=None)
print(all_sheets.keys()) # 查看所有工作表名

b) 指定列标题行

如果你的 Excel 文件标题不在第一行,可以使用 header 参数指定。

df_custom_header = pd.read_excel('data.xlsx', header=1)

c) 不使用标题行

如果文件没有标题行,可以设置 header=Nonepandas 会自动使用 0, 1, 2... 作为列名。

df_no_header = pd.read_excel('data.xlsx', header=None)
print(df_no_header)

d) 指定列名

你可以自定义读取后的列名。

Python如何读取Excel文件?-图3
(图片来源网络,侵删)
# 自定义列名
df_custom_cols = pd.read_excel('data.xlsx', names=['用户名', '年纪', '所在地'])
print(df_custom_cols)

e) 跳过行

使用 skiprows 跳过文件开头的几行。

# 跳过前2行
df_skip_rows = pd.read_excel('data.xlsx', skiprows=2)

f) 指定读取的列

如果文件很大,你只需要其中几列,可以使用 usecols 参数来提高效率。

# 只读取'姓名'和'城市'列
df_use_cols = pd.read_excel('data.xlsx, usecols=['姓名', '城市'])
print(df_use_cols)

使用 openpyxl

openpyxl 是一个专门用于读写 .xlsx 文件的库,它功能非常强大,可以精确地操作 Excel 的单元格、样式、图表等,如果你需要对 Excel 进行复杂的操作,而不仅仅是读取数据,openpyxl 是一个很好的选择。

安装 openpyxl

pip install openpyxl

读取 Excel 文件

openpyxl 将整个工作簿(Workbook)加载到内存中,你可以选择活动工作表或指定工作表。

示例代码:

from openpyxl import load_workbook
# 文件路径
file_path = 'data.xlsx'
# 加载工作簿
# read_only=True 模式可以更快地读取大文件,但不能修改
# data_only=True 会读取单元格的值而不是公式
wb = load_workbook(filename=file_path, data_only=True)
# 获取活动工作表,或者通过名字指定
# sheet = wb.active
sheet = wb['Sheet1'] # 假设工作表名为 'Sheet1'
# 读取单个单元格的值
# A1 单元格的值
name_a1 = sheet['A1'].value
print(f"A1 单元格的值是: {name_a1}")
# 读取 B2 单元格的值
age_b2 = sheet['B2'].value
print(f"B2 单元格的值是: {age_b2}")
# 读取整行数据
# 第2行数据 (索引从1开始)
row_data = sheet[2]
for cell in row_data:
    print(f"单元格 {cell.coordinate} 的值是: {cell.value}")
# 读取整列数据
# 第1列数据
col_data = sheet['A']
for cell in col_data:
    print(f"单元格 {cell.coordinate} 的值是: {cell.value}")
# 遍历所有行和列
print("\n遍历整个工作表:")
for row in sheet.iter_rows(values_only=True):
    # row 是一个包含该行所有单元格值的元组
    print(row)
# 关闭工作簿,释放资源
wb.close()

使用 xlrd

xlrd 是一个较老的库,主要用于读取 .xls 文件(旧版 Excel 格式)。注意:从 xlrd 2.0 版本开始,它只支持读取,不再支持写入。

安装 xlrd

pip install xlrd

读取 .xls 文件

示例代码:

import xlrd
# 文件路径
file_path = '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} 列")
# 读取单元格的值
# A1 单元格 (行1, 列0)
value_a1 = sheet.cell_value(0, 0)
print(f"A1 单元格的值是: {value_a1}")
# 读取整行
# 第2行 (索引从0开始)
row_data = sheet.row_values(1)
print(f"第2行的数据是: {row_data}")
# 读取整列
# 第1列 (索引从0开始)
col_data = sheet.col_values(0)
print(f"第1列的数据是: {col_data}")

总结与对比

特性 pandas openpyxl xlrd
主要用途 数据分析、数据处理 精确操作Excel (单元格、样式、图表) 读取旧版 .xls 文件
易用性 非常高,一行代码即可读取 中等,需要更多操作来获取数据 简单,但功能有限
数据结构 DataFrame,非常强大 Worksheet, Cell 对象 Sheet, Cell 对象
性能 读取大文件时 read_only 模式下不错 纯读取不如 pandas 快,但功能全面 较快,但仅限 .xls
推荐场景 绝大多数情况下的首选,特别是需要做数据分析时 需要读取非数据内容(如公式、格式)或对 Excel 进行复杂修改
分享:
扫描分享到社交APP
上一篇
下一篇