Python 读取 Excel 文件

在 Python 中,如果想要读取 Excel 文件,常用的是使用以下 2 种方式来实现。

  • pandas 库。
  • openpyxl 库。

使用 pandas 库读取 Excel

在 Python 中,我们可以使用 pandas 库的 read_excel() 函数来读取一个 Excel 文件。需要注意的是,pandas 是和 openpyxl 一起搭配使用,才能操作 Excel 文件的。因此在使用之前,需要执行以下命令来安装它们。

pip install pandas
pip install openpyxl

语法:

import pandas as pd
pd.read_excel(path, index_col=m, sheet_name=n)

说明:

read_excel() 函数接收以下 3 个参数。

  • path(必选):表示文件路径
  • index_col(可选):用于将某一列指定为行名。
  • sheet_name(可选):表示选中哪个表单(Excel 通常包含多个表单),默认值为 0(也就是选中第 1 个表单)。

read_excel() 函数会返回一个 DataFrame 对象,也就是会将 Excel 文件的数据转换成一个 DataFrame 对象。

首先在当前项目下的 data 文件夹中新建一个名为 fruits.xlsx 的文件,项目结构如下图 1 所示。然后往 fruits.xlsx 文件中添加数据,如下图 2 所示。

Pandas 读取 Excel 的项目结构

fruits.xlsx 文件内容

示例 1:pandas 读取 Excel

import pandas as pd

df = pd.read_excel('data/fruits.xlsx')
pd.set_option('display.unicode.east_asian_width', True)

print(df)

运行结果如下。

   id  name  type season  price
0   1  葡萄  浆果     夏   27.3
1   2  柿子  浆果     秋    6.4
2   3  橘子  浆果     秋   11.9
3   4  山竹  仁果     夏   40.0
4   5  苹果  仁果     秋   12.6

使用 openpyxl 库读取 Excel

在 Python 中,我们还可以使用 openpyxl 库来读取 Excel 文件。由于 openpyxl 是第三方模块,在使用之前需要执行以下命令安装它(如果前面已经安装了,就不需要再另外安装)。

pip install openpyxl

提示: openpyxl 库操作 Excel 文件会比较麻烦,更推荐使用 pandas 库来操作。

1. Workbook 对象

在 Python 中,我们可以使用 openpyxl 库的 load_workbook() 函数来获取到一个 Workbook 对象,该对象代表的就是整个 Excel 文档。

语法:

import openpyxl
wb = openpyxl.load_workbook(路径)

说明:

load_workbook() 函数接收一个路径作为参数,该方法返回的是一个 Workbook 对象,该对象代表的就是一个 Excel 文档,类似于 File 对象代表一个文本文件。

Workbook 对象提供了很多属性,常见的如下表所示。

Workbook 对象的属性
属性 说明
sheetnames 获取所有表名,返回的是一个列表
active 获取当前活动表,返回的是一个 Worksheet 对象

示例 2:openpyxl 读取 Excel

import openpyxl

wb = openpyxl.load_workbook('data/fruits.xlsx')
print(wb)

# 获取所有表名
sheets = wb.sheetnames
print(sheets)

# 获取当前活动表
sheet = wb.active
print(sheet.title)

运行结果如下。

<openpyxl.workbook.workbook.Workbook object at 0x000001DD77D1E7D0>
['Sheet1']
Sheet1

分析:

wb.sheetnames 获取的是所有表名,它返回的是一个列表。wb.active 获取的是当前的活动表。所谓的 “活动表”,指的是在 Excel 中打开时出现的工作表。还可以使用 wb['表名'] 的方式来获取某一张表,比如:sheet = wb['Sheet1']。

2. Worksheet 对象

wb.active 和 wb['表名'] 这两种方式返回的都是一个 Worksheet 对象,一个 Worksheet 对象代表一张表。

Worksheet 对象的属性比较多,常用的如下表所示。

Worksheet 对象的属性
属性 说明
title 标题
max_row 行数
max_column 列数
rows 按行获取单元格(生成器)
columns 按列获取单元格(生成器)

示例 3:openpyxl 获取行数和列数

import openpyxl

wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active

print('行数:', sheet.max_row)
print('列数:' , sheet.max_column)

运行结果如下。

行数:6
列数:5

示例 4:openpyxl 操作行或列

import openpyxl

wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active

for rows in sheet['B2': 'B6']:
    for cell in rows:
        print(cell.value)

运行结果如下。

葡萄
柿子
橘子
山竹
苹果

分析:

sheet['B2': 'B6'] 表示获取 B 列中的第 2 行到第 6 行。“B2” 中的 “B” 表示哪一列,“2” 表示哪一行。打开 Excel 文件,也可以很直观地看出来,如下图所示。

openpyxl 操作行或列

3. Cell 对象

每一个 Worksheet 对象代表的就是一张表,而每一个 Cell 对象代表的是一个单元格。拿到了 Worksheet 对象后,接下来就可以使用它来获取 Cell 对象了。获取某一个单元格有两种方式。

语法:

sheet['单元格名']
sheet.cell(column=m, row=n)

说明:

“单元格名” 指的是 “列” 和 “行” 组成的名字,比如 A1、B1、C1 等。cell() 是 Worksheet 对象的一个方法,它可以接收 column 和 row 两个参数。column 用于设置列号,row 用于设置行号。

不管是 sheet[] 方式,还是 sheet.cell() 方法,都会返回一个 Cell 对象。Cell 对象常见的属性如下表所示。

Cell 对象的属性
属性 说明
value 单元格的值
column 单元格所在的列,如 “A”
row 单元格所在的行,如 “1”
coordinate 单元格的位置,如 “A1”

示例 5:使用 sheet[] 方式

import openpyxl

wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active
cell = sheet['B3']

print('单元格:', cell.coordinate)
print('值:', cell.value)

运行结果如下。

单元格:B3
值:柿子

分析:

sheet['B3'] 表示获取第 2 列第 3 行的单元格。对于上面示例来说,下面两种方式是等价的。

# 方式 1
cell = sheet['B3']

# 方式 2
cell = sheet.cell(column=2, row=3) 

示例 6:openpyxl 获取某一列所有单元格

import openpyxl

wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active

for i in range(2, sheet.max_row + 1):
    print(sheet.cell(column=2, row=i).value)

运行结果如下。

葡萄
柿子
橘子
山竹
苹果

分析:

最后,总结一下 openpyxl 对 Excel 文件的操作,主要有以下 2 点。

  • 一个 Workbook 对象代表一个 Excel 文档,一个 Worksheet 对象代表一张表,而一个 Cell 对象代表一个单元格。
  • 一般是通过 Workbook 对象来找到 Worksheet 对象,然后通过 Worksheet 对象来找到 Cell 对象。这个就像先找到爷爷,再通过爷爷找到爸爸,最后通过爸爸找到儿子。

上一篇: Python 写入 JSON

下一篇: Python 写入 Excel

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号