【002】Excel中直接写Python代码是怎么做到的?

背景

Excel 是全球最普及的数据分析工具,拥有公式、透视表、Power Query 等强大功能。然而,传统 Excel 编程语言(如 VBA)运行在本地电脑上,对于复杂的数据分析有些力不从心。

Python 是数据科学领域的标准语言,拥有丰富的数据处理和机器学习库。将 Python 集成到 Excel 中,可以让用户在不离开 Excel 环境的前提下,借助 Python 的能力完成更高级的数据分析任务。

Python in Excel(简称 PiE)正是微软给出的答案。它将 Python 深度嵌入 Excel,让用户可以直接在单元格中编写 Python 代码,无需安装 Python、无需配置环境。

数据流:代码去了哪里?

理解 PiE 的关键,就是明白 Python 代码并不在本地执行。

当用户在 Excel 单元格中输入 =PY(...) 公式时,整个数据流如下:

  1. Excel 将 Python 代码与所需数据打包,一起发送到 Microsoft Azure 云端,因此可用 Internet 连接是必须的
  2. Azure 为该任务分配一个独立的隔离容器(secured container)
  3. 容器执行 Python 代码,处理数据
  4. 执行结果返回 Excel,填入对应单元格

整个过程对用户来说是透明的——只需要一个网络连接,就能使用完整的 Python 环境。

核心函数:xl() 和 PY()

粗略的讲,PiE 中只有两个核心函数需要掌握:

PY() 负责触发 Python 代码执行。在任意单元格输入 =PY(...),按 <Ctrl+Enter> 完成输入,该单元格就会成为 Python 代码的输出显示区。

xl() 是 Python 端读写 Excel 数据的唯一入口。数据通过 xl() 传入 Python 后,会以 Pandas DataFrame 的形式存在,可以直接使用 Python 的所有数据处理能力。

这两者的配合就是 PiE 的全部逻辑:用户通过 xl() 获取数据(某些场景中数据是 Python 创建的),用 Python 处理数据,Python 最后一行的返回值自动显示在 =PY() 所在的单元格中。

安全机制

为什么 PiE 选择云端执行,而不是本地执行?数据安全有保障吗?

Python 是开源语言,由全球开发者共同维护,微软无法控制其代码内容。

为解决这个潜在的隐患,PiE 将 Python 放在 Azure 隔离容器中运行,并对代码能力做了严格限制:

  • 只能使用微软预审核过的库,不能随意 import 任意模块
  • 不能访问本地电脑文件、设备、网络
  • 只能通过 xl() 读写 Excel 数据,不能操作本地系统
  • 关闭工作簿后,容器及其中所有数据立即销毁

这些限制保证了 PiE 的安全性,用户可以放心使用 Python 处理敏感数据,而不必担心恶意代码风险。

示例:计算平均销售额

工作表 A 列是门店名称,B 列是对应的销售额,数据分布如下:

A列B列
门店销售额
门店A12,580
门店B9,800
门店C15,320
门店D8,700
门店E11,200
门店F14,400

先用 Excel 原生的 AVERAGE 函数计算平均值,D1单元格输入如下公式并回车:

=AVERAGE(B2:B7)

在这里插入图片描述

结果显示 12000

然后在 D4 单元格输入以下 Python 公式,并按 <Ctrl+Enter> 完成输入:

=PY(xl("A1:B7", headers=True)["销售额"].mean())

在这里插入图片描述

几秒后,D4 单元格同样显示结果 12000,与 Excel 原生公式结果一致。

代码解析

=PY(xl("A1:B7", headers=True)["销售额"].mean()) 这是一个完整的 Excel 公式,下面对其逐层解析:

xl("A1:B7", headers=True)

xl() 是 PiE 的核心数据函数。“A1:B7” 指定读取第 1 行到第 7 行的两列数据表,范围包含表标题行。headers=True 参数告诉 xl() 将第一行识别为列标题,执行后数据以 Pandas DataFrame 形式返回,B 列自动映射为 销售额 这一列名。

["销售额"]

方括号按列名从 DataFrame 中取出 销售额 列,即 B2:B7 的 6 个数值。

.mean()

对取出的列调用 .mean() 方法,计算这 6 个数值的平均值,结果为 12000。

=PY(...)

最外层的 =PY() 是 Excel 公式,作用是触发 Python 代码执行,并将 Python 返回值自动填入当前单元格。整个公式中无需指定输出位置,Python 最后一层的计算结果就是单元格的显示内容。

多行写法

PiE 公式支持换行编写,在单元格内按 <Alt+Enter> 即可换行。上面单行公式改写为多行如下:

df = xl("A1:B7", headers=True)
avg = df["销售额"].mean()
avg

多行写法中,第1行读取数据,第2行计算均值,最后一行 avg 的值即为单元格显示结果。

代码也可以使用列索引指定数据列, Python 中编号都是从 0 开始,因此 1 代表第二列。

df = xl("A1:B7")
avg = df[1].mean()
avg

总结

PiE 的使用范式非常简单,总共分三步:

  1. xl() 读取 Excel 中的数据
  2. 用 Python 处理数据
  3. 代码最后一行的返回值自动填入单元格

对于已有 Excel 基础的用户来说,只需要记住两个核心函数和这一条返回规则,就可以开始使用 Python 处理数据。后续文章将逐步展开 xl() 的更多用法和 Python 数据处理技巧。

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):2253标注数量(xml文件个数):2253在电力系统运行过程中,输电线路的安全状况对于整个电力供应网络的稳定性具有至关重要的影响。为确保输电线路的正常运行,通常需要对输电线路进行定期的检测和维护。近年来,随着计算机视觉技术的发展,红外成像技术因其在电力设备监测方面的独特优势而得到广泛应用。红外过热检测是红外技术的一个分支,它能够通过捕捉设备在运行过程中产生的红外辐射来判断设备是否存在过热问题。过热往往预示着潜在的故障风险,因此,对输电线路进行红外过热检测可以及时发现故障隐患,预防可能发生的电力事故。本数据集命名为“电力场景输电线路红外过热检测数据集VOC+YOLO格式2253张1类别”,是为了支持相关的研究和应用开发而精心制作的。数据集提供了2253张不同场景下的输电线路红外过热图像,这些图像均采用高清晰度数码相机拍摄,确保了数据的可用性和准确性。每张图片都配有详细标注信息,标注内容以Pascal VOC格式和YOLO格式的标注文件呈现。Pascal VOC格式包含xml文件,而YOLO格式则包含txt文件,两种格式的文件都用于图像识别和目标定位的训练与评估。数据集中的每张图片都配有对应的标注信息,标注数量与图片数量相同,均为2253个。这意味着每一张图片都被精细地标注,标注内容包括输电线路的红外过热区域、温度分布、以及其他可能影响分析的关键信息。这种详细的标注工作为机器学习模型提供了丰富的训练材料,使其能够更准确地识别和预测输电线路的潜在过热问题。此外,由于数据集未包含分割路径的txt文件,因此图像处理和分析工作将集中在目标检测和分类方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值