使用 Python 从 Microsoft Excel 文件导入数据

发布日期:2026-07-20 01:03:05  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 01:03:05  
0

介绍

根据定义,数据可以是任何代表某事物属性的字母数字值。它本身不具有任何语义含义。因此,必须将其置于上下文中才能生成信息,进而推动决策。

作为事实上的标准电子表格应用程序,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 所示:

现在让我们一步一步解释如何将数据写入文件。

  1. 导入模块和类:
      from openpyxl import load_workbook, Workbook
    from openpyxl.worksheet.table import Table, TableStyleInfo
    
  1. 定义一个名为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
    
  1. 加载工作簿,选择活动工作表并重命名:
      wb = Workbook()
    ws = wb.active
    ws.title = 'Players info'
    
  1. 单独添加标题,然后使用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 使用一个玩家说明了此步骤:

尽管乍一看这可能很复杂,但经过一些练习后就会成为习惯。

  1. 创建一个从 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))
    
  1. 为表格设置样式并将其添加到电子表格中。请注意,您可以使用 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
    

按照以下步骤操作:

  1. 加载电子表格,选择球员信息表,然后为单元格 G1 选择标题:
      wb = load_workbook(filename = 'players.xlsx')
    ws = wb['Players info']
    ws['G1'] = 'BMI'
    
  1. 从第 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 电子表格轻而易举。更重要的是,我们学会了如何处理现有数据以生成信息。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据