使用 Python 从 Microsoft Excel 文件导入数据
介绍
根据定义,数据可以是任何代表某事物属性的字母数字值。它本身不具有任何语义含义。因此,必须将其置于上下文中才能生成信息,进而推动决策。
作为事实上的标准电子表格应用程序,Microsoft Excel(简称 Excel)允许用户将数据组织和处理成表格和图表。如果与面向对象编程的优势相结合,业务或数据科学专业人士可以使用它来开发强大的分析工具。
在本指南中,我们将学习如何使用 Python 和openpyxl模块写入和读取工作簿。虽然还有其他模块提供类似的功能,但此模块同时包含读取和写入功能,使用简单,并且是根据 MIT 许可证发布的免费软件。
写入 Excel 文件
在我们继续之前,您需要使用命令行中的pip安装openpyxl ,最好在虚拟环境中:
pip install openpyxl
完成后,启动 Python shell 并输入以下内容:
from openpyxl import Workbook
接下来,创建一个新的 Workbook 实例:
wb = Workbook()
并将其作为players.xlsx保存在当前工作目录中:
wb.save('players.xlsx')
到目前为止一切顺利 - 但我们所做的就是创建一个空的电子表格,如图 1 所示:
现在让我们一步一步解释如何将数据写入文件。
- 导入模块和类:
from openpyxl import load_workbook, Workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
- 定义一个名为str_to_int_or_float的函数,将字符串转换为整数或浮点数(如果可能)(布尔值和纯字符串保持不变)。这将允许我们稍后以正确的格式将数字插入电子表格。
def str_to_int_or_float(value):
if isinstance(value, bool):
return value
try:
return int(value)
except ValueError:
try:
return float(value)
except ValueError:
return value
- 加载工作簿,选择活动工作表并重命名:
wb = Workbook()
ws = wb.active
ws.title = 'Players info'
- 单独添加标题,然后使用nba_players作为数据源:
ws.append(['First name', 'Last name', 'Jersey', 'Height [mts]', 'NBA debut year', 'Weight [kgs]'])
nba_players = [{'firstName': 'LeBron', 'lastName': 'James', 'jersey': '2', 'heightMeters': '2.03', 'nbaDebutYear': '2003', 'weightKilograms': '113.4'}, {'firstName': 'LaMarcus', 'lastName': 'Aldridge', 'jersey': '12', 'heightMeters': '2.11', 'nbaDebutYear': '2006', 'weightKilograms': '117.9'}, {'firstName': 'Kawhi', 'lastName': 'Leonard', 'jersey': '2', 'heightMeters': '2.01', 'nbaDebutYear': '2011', 'weightKilograms': '104.3'}, {'firstName': 'Jabari', 'lastName': 'Parker', 'jersey': '2', 'heightMeters': '2.03', 'nbaDebutYear': '2014', 'weightKilograms': '111.1'}]
由于nba_players中的每个元素都是一个字典,因此我们可以使用.values()方法访问其值。接下来,我们使用 Python 内置的map函数对每个值运行str_to_int_or_float。最后,我们将结果转换为列表。
for player in nba_players:
ws.append(list(map(str_to_int_or_float, player.values())))
图 2 使用一个玩家说明了此步骤:
尽管乍一看这可能很复杂,但经过一些练习后就会成为习惯。
- 创建一个从 A1 开始到最后一个非空单元格结束的 Excel 表:
last_cell = ws.cell(row = ws.max_row, column = ws.max_column).coordinate
player_table = Table(displayName = 'PlayerTable', ref = 'A1:{}'.format(last_cell))
- 为表格设置样式并将其添加到电子表格中。请注意,您可以使用 Excel 版本中可用的任何表格样式(我们将在此处使用“表格样式中号 6”),其名称中不带空格。最后,保存更改。
style = TableStyleInfo(name = 'TableStyleMedium6', showRowStripes=True)
player_table.tableStyleInfo = style
ws.add_table(player_table)
wb.save('players.xlsx')
让我们在图 3 中看看为了更好的可视化而调整列大小后电子表格应该是什么样子:
如您所见,表格上已自动添加过滤器,以方便您使用。此时,您可以根据此表格创建图表或根据需要对其进行操作 - 通过 Excel 或以编程方式进行,我们将在下文中学习。
读取 Excel 文件
使用openpyxl,您还可以从现有电子表格中读取数据。除此之外,这还可以执行计算并添加原始数据集中不包含的内容。
为了说明这一点,我们将读取每一行并计算每个球员的身体质量指数(BMI )
BMI = weight / height^2
按照以下步骤操作:
- 加载电子表格,选择球员信息表,然后为单元格 G1 选择标题:
wb = load_workbook(filename = 'players.xlsx')
ws = wb['Players info']
ws['G1'] = 'BMI'
- 从第 2 行开始迭代表格。请记住,Python 内置范围函数给出的终点不是生成列表的一部分。这就是为什么我们需要将ws.max_row加 1才能到达最后一行。
对于每一行,体重(以千克为单位)存储在第 6 列,因此我们使用工作表对象的.cell()方法来检索其值。接下来,我们对身高(第 4 列)执行相同操作。这为我们提供了计算BMI所需的信息- 在本例中,我们将其四舍五入到小数点后 2 位。最后,我们将结果写在第 7 列:
for r in range(2, ws.max_row + 1):
weight = ws.cell(row = r, column = 6).value
height = ws.cell(row = r, column = 4).value
bmi = round(weight / (height ** 2), 2)
ws.cell(row = r, column = 7).value = bmi
.cell ()方法可用于设置或读取单元格的值,前提是知道其坐标。
不要忘记保存更改:
wb.save('players.xlsx')
这是我们目前的电子表格(见图 4):
现在,您可以将表格扩展至包含 G 列,方法是将单元格 F5 中的蓝色标记拖到右侧。这将在新列中设置与其他列相同的格式(参见图 5,其中蓝色标记现在位于 G5):
如您所见,读取 Excel 文件只需知道如何迭代其行。 .cell ()方法负责处理其他所有事情。
概括
本指南的关键点在于,使用 Python 读取和写入 Excel 电子表格轻而易举。更重要的是,我们学会了如何处理现有数据以生成信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~