Excel 支持运行 Python 代码,做表格也要学编程了?
liuian 2024-12-20 17:20 88 浏览
8 月 22 日,微软宣布同 Anaconda 合作,为 Excel 带来 Python 整合。整合了 Python 后的 Excel 可以直接在单元格中运行 Python 代码,使用常用的 Python 库(例如 pandas、numpy、matplotlib 等)来进行统计学运算、绘图等,甚至也可以加载一些机器学习库。
由于在云端进行运算,Python in Excel 并不要求用户在计算机上预先安装任何环境,有 Excel 程序和互联网连接即可开始编程。目前,Python in Excel 已经上线 Microsoft 365 Insider 的 Beta Channel(仅限 Windows 版本),作为免费预览给 Insider 们体验。我也借此机会,打开了 Python in Excel 简单试用了一下。
▍Python in Excel 的优势
Python in Excel 可以解决一些以往单纯使用 Excel 可能无法做到的数据整理、统计报表、图形绘制等问题。利用 Python 和各类常见、功能强大的库,我们可以在 Excel 中使用 Python 直接访问数据并形成可编辑的输出结果。
举个例子而言,利用 pandas 库的 query 功能,我们可以方便地对数据进行高级筛选,并把结果呈现在 Excel 区域中。
在过去 Excel 本身的高级筛选功能需要我们新开一个区域,将筛选规则写进去;但对于 pandas 而言,则是将相关的筛选要求写进代码。例如,我在整理学生档案信息时,获得了一组学号,需要查看这些学号对应的学生信息。如使用 Excel 的高级筛选功能,我一般会把表头复制到另一张工作表,然后把需要的学号输入进去,再使用高级筛选选择范围。但在 Python in Excel 使用 pandas 的 query 功能,只需要敲一行代码即可。
此外,我们也可以快速在 Excel 中创建数据统计报表。例如 pandas 可以对 DataFrame 执行 describe 函数,返回一组数据的平均数、标准差、最大值、最小值,并默认按照 25% 的步长计算分度值——如果用 Excel 函数,则需要好几个函数才能形成表格;而数据及引用范围的更新,用 Python 也只不过是敲几个字母的事情。
▍从单元格运行 Python 代码
升级到 Beta Channel 的 Microsoft 365 后,在「公式」选项卡的显著位置即可看到「Python(预览版)」区域,其中我们可以直接向单元格插入 Python,进行重置,或者打开「诊断」窗口。点击「插入 Python」或者在活动单元格中输入 =PY(,即可自动开启 Python 代码输入模式。此时,公式编辑栏左侧会出现一个绿色背景的「PY」图标,表示当前单元格是 Python 代码内容。
与以往在 IDE 环境中使用 csv 或其他模块读取电子表格中的数据不同的是,Python in Excel 可以直接在 Excel 工作表内通过 Python 代码对 Excel 表格的区域加以读取和引用,从而在一定程度上减少了我们的工作量。目前,Python in Excel 目前主要有以下几个方面值得关注:
示例代码
Python in Excel 提供了好几种示例数据,包括使用 pandas、matplotlib、seaborn 等 Python 库进行各类统计分析、绘图等操作。例如,其中一种示例让我们可以使用 pandas 对一组数据进行描述性统计。
初始化
Python in Excel 提供一个默认的已经初始化的环境,这个环境中诸如 numpy、pandas 等常用的库都已经通过 import 声明,用户可以在单元格中直接引用,而无需每次在单元格编程的时候再次声明。目前,默认的初始化环境还无法修改。不过,如果你需要使用除了已经导入的库之外的 Python 库而不想每次都声明,Excel 也提供了一个解决方式,那就是在工作簿的头部新建一个工作表并在第一个单元格声明所需要的库即可 —— 工作簿一开头的工作表总是会最先执行计算。
引用 Excel 表格
Python in Excel 主要使用 pandas 库中「Series」和「DataFrame」两种类型的数据对现有的 Excel 表格进行转化,以符合在 Python 中进行数据分析的需要。前者是一维表,后者是二维表。但除此之外,Python in Excel 也支持 Python 所支持的各类数据类型。在 Python in Excel 中引用 Excel 单元格、区域、表格等的方式是使用 xl() 函数。使用方式如下:
#将 A1:I144 范围内的 Excel 区域作为一个 DataFrame,并以 A 行文字作为标题行
df = xl("A1:I144", headers=True)
#将名为「IrisDataSet5」表格内的全部数据作为一个 Data Frame,并以第一行文字作为标题行
df = xl("IrisDataSet5[#全部]", headers=True)
一旦引用完毕,df 作为一个 DataFrame 的变量名,即可在接下来的 Python 数据分析中使用。例如,可以为 DataFrame 重设索引、建立分类汇总、进行描述统计乃至绘图,或者是读取其内部的某个数据;当然也可以通过列表、字典等存储和传送数据。
Python 输出
Python in Excel 的代码默认使用 Enter 键换行。如果代码已经完成,则可以使用 Ctrl+Enter 键提交。提交后,Excel 会将代码送至云端进行运算,并返回指定形式的输出。Excel 中有两种形式的输出:
Python 数据类型。这种形式的输出会在单元格中显示当前代码运行结果所输出的数据类型,如 DataFrame、List、Image 等等。
Excel 值。这种形式的输出将直接显示 Python 代码运行的结果,例如将 DataFrame 中的数据自动填充到 Excel 区域中(例如上图中 G4 单元格中的 DataFrame 自动填充到了 G4:K12 区域),或者将图表显示在 Excel 表格中。区域中的数据可以使用 Excel 的格式化功能来修改相关格式,例如字体大小、粗细或者是货币单位、小数点后保留位数,等等。
Python 诊断
Python in Excel 也提供一定程度上的诊断工具。当单元格中出现计算错误(例如 #PYTHON 错误表示代码运行出错)时,可以通过「诊断」窗格查看当前工作表或者整个工作簿中 Python 代码执行的问题,并提供历史记录功能。另外,如果在 Python 代码中使用了 print() 函数,显示结果也会呈现在这里;如果仅仅使用 print() 函数在 Python in Excel 中作为输出,单元格中的运算结果将会是 NoneType 类型。
▍实际体验
在 Excel 的公式栏中写代码,感觉总是有点奇怪。至少在现阶段,实际的代码编辑体验是完全不如 VS Code 等成熟的 IDE 的——代码不支持高亮、没有自动缩进,自动补全功能也尚有缺失,默认编辑字体也奇奇怪怪,Python 还是很需要等宽字体来验证缩进的,然而很多时候正在编辑的代码字体和原先完全不一致,搞得人很烦躁。
为了整理一份数据,我在 Python in Excel 里面写了大概三十行代码,过程很难说有多愉悦;不过好在诊断信息还算详细和准确,让我可以及时发现代码中的一些错误,从而顺利完成数据整理的工作。
不确定上面的这些糟糕的体验会不会在之后的版本更新中得到改进。Anaconda 博客甚至指出,Python in Excel 的目的并非是为开发程序所设计,用户需要专注于将其应用于数据的整理分析,并尽量减少在 Python in Excel 中执行过于复杂的代码。
the Python calculations run in the Microsoft Cloud, and your results are returned to the worksheet.
正如微软官方所说的那样,Python in Excel 的运算过程发生在云端,决定了没有网络的情况下是无法运行 Python in Excel 代码的,会出现 #CONNECT 错误——这在一定程度上可能会对数据保密性产生影响,并且更重要的是,在没有网络的情况下无法及时更新计算结果。
不过,可以直接在 Excel 中使用 Python 来访问 Excel 工作簿中的数据,并且对数据进行整理、运算、分析、绘图,并将结果直接呈现在 Excel 工作簿中,或许是 Python in Excel 最有优势的一点。
此外,以往借助 Excel 公式、数据透视表等工具难以解决的数据分析与可视化难题,利用 Python 强大的各种库也往往可以迎刃而解;也可以直接使用 Python 来定义新的函数来组合一系列 Python 操作,从而简化工作流、提高效率。
值得注意的是,Python in Excel 的提供商 Anaconda 已经推出了专题博客页面,提供许多详细的教程与示例可以学习,十分值得参考。
相关推荐
- 赶紧收藏!编程python基础知识,本文给你全部整理好了
-
想一起学习编程Python的同学,趁我粉丝少,可以留言、私信领编程资料~Python基础入门既然学习Python,那么至少得了解下这门编程语言,知道Python代码执行过程吧。Python的历...
- 创建绩效改进计划 (PIP) 的6个步骤
-
每个经理都必须与未能达到期望的员工抗衡,也许他们的表现下降了,他们被分配了新的任务并且无法处理它们,或者他们处理了自己的任务,但他们的行为对他人造成了破坏。许多公司转向警告系统,然后在这些情况下终止。...
- PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子
-
PI3K/AKT/mTOR(PAM)信号通路是真核细胞中高度保守的信号转导网络,作用于促进细胞存活、生长和细胞周期进程。PAM轴上生长因子向转录因子的信号传导受到与其他多条信号通路的多重交叉相互作用的...
- 互联网公司要求签PIP,裁员连N+1都没了?
-
2021年刚画上句号,令无数互联网公司从业者闻风丧胆的绩效公布时间就到了,脉脉上已然炸了锅。阿里3.25、腾讯二星、百度四挡、美团绩效C,虽然名称五花八门,实际上都代表了差绩效。拿到差绩效,非但不能晋...
- Python自动化办公应用学习笔记3—— pip工具安装
-
3.1pip工具安装最常用且最高效的Python第三方库安装方式是采用pip工具安装。pip是Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。pip是Python官方提...
- 单片机都是相通的_单片机是串行还是并行
-
作为一个七年的从业者,单片机对于我个人而言它是一种可编程的器件,现在长见到的电子产品中几乎都有单片机的身影,它们是以单片机为核心,根据不同的功能需求,搭建不同的电路,从8位的单片机到32位的单片机,甚...
- STM32F0单片机快速入门八 聊聊 Coolie DMA
-
1.苦力DMA世上本没有路,走的人多了,便成了路。世上本没有DMA,需要搬运的数据多了,便有了DMA。大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中...
- 放弃51单片机,直接学习STM32开发可能会面临的问题
-
学习51单片机并非仅仅是为了学习51本身,而是通过它学习一种方法,即如何仅仅依靠Datasheet和例程来学习一种新的芯片。51单片机相对较简单,是这个过程中最容易上手的选择,而AVR单片机则更为复杂...
- STM32串口通信基本原理_stm32串口原理图
-
通信接口背景知识设备之间通信的方式一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。串行通信的分类1、按照数据传送方向,分为:单工:数据传输只支持数据在一个...
- 单片机的程序有多大?_单片机的程序有多大内存
-
之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小:我用的单片机芯片是STM32F103C8T6,程序储存器(flash)只有64K。从...
- 解析STM32单片机定时器编码器模式及其应用场景
-
本文将对STM32单片机定时器编码器模式进行详细解析,包括介绍不同的编码器模式、各自的优缺点以及相同点和不同点的应用场景。通过阅读本文,读者将对STM32单片机定时器编码器模式有全面的了解。一、引言...
- 两STM32单片机串口通讯实验_两个32单片机间串口通信
-
一、实验思路连接两个STM32单片机的串口引脚,单片机A进行发送,单片机B进行接收。单片机B根据接收到单片机A的指令来点亮或熄灭板载LED灯,通过实验现象来验证是否通讯成功。二、实验器材两套STM32...
- 基于单片机的智能考勤机设计_基于51单片机的指纹考勤机
-
一、设计背景随着科技水平的不断发展,在这么一个信息化的时代,智能化信息处理已是提高效率、规范管理和客观审查的最有效途径。近几年来,国内很多公司都在加强对企业人员的管理,考勤作为企业的基础管理,是公司...
- STM32单片机详细教学(二):STM32系列单片机的介绍
-
大家好,今天给大家介绍STM32系列单片机,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。前言STM32系列芯片是为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortexM...
- STM32单片机的 Hard-Fault 硬件错误问题追踪与分析
-
有过单片机开发经验的人应该都会遇到过硬件错误(Hard-Fault)的问题,对于这样的问题,有些问题比较容易查找,有些就查找起来很麻烦,甚至可能很久都找不到问题到底是出在哪里。特别是有时候出现一次,后...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)