Excel 支持运行 Python 代码,做表格也要学编程了?
liuian 2024-12-20 17:20 70 浏览
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 已经推出了专题博客页面,提供许多详细的教程与示例可以学习,十分值得参考。
相关推荐
- 面试怕被问Hashmap,多看看这个文章
-
o数据结构otable数组长度永远为2的幂次方o那么为什么要把数组长度设计为2的幂次方呢?o扩容o链表树化o红黑树拆分o查找o插入o删除o遍历oequasl和hashcode总结HashMap是面试中...
- 非常简洁地重试Retry组件,使用起来杠杠的
-
前言小伙伴是不是经常遇到接口调用异常,超时的场景?尤其网络抖动导致timeout超时的场景,我们一般产品就会叫我们要重试几次。很多小伙伴的实现方式是写个循环调用for(inti=1;i<=3;...
- Kafka消息可靠传输之幂等、事务机制
-
一般而言,消息中间件的消息传输保障有3个层级,分别如下。atmostonce:至多一次。消息可能会丢失,但绝对不会重复传输。atleastonce:最少一次。消息绝不会丢失,但可能会重复传输。...
- Seata源码—9.Seata XA模式的事务处理
-
大纲1.SeataXA分布式事务案例及AT与XA的区别2.SeataXA分布式事务案例的各模块运行流程3.Seata使用SpringBoot自动装配简化复杂配置4.全局事务注解扫描组件的自动装配...
- Disruptor—3.核心源码实现分析一
-
大纲1.Disruptor的生产者源码分析2.Disruptor的消费者源码分析3.Disruptor的WaitStrategy等待策略分析4.Disruptor的高性能原因5.Disruptor高性...
- Spring Boot 进阶-详解SpringBoot中条件注解使用
-
作为使用SpringBoot框架的开发者来讲,如果你连如下的这些注解你都没有听说过,没有用过,那我劝你还是放弃吧?在SpringBoot中我们最常见到的注解应该是条件注解了吧!也就是@Condit...
- 如何自定义编解码器(如何自定义编解码器的程序)
-
1.前言上一节我们一节了解了什么是编码解码、序列化和反序列化了,并且留有一道思考题,本节内容主要是深入解析该思考题。思考题:能否把我们的编码和解码封装成独立的Handler呢?那么应该如何去封装...
- Disruptor—3.核心源码实现分析二
-
大纲1.Disruptor的生产者源码分析2.Disruptor的消费者源码分析3.Disruptor的WaitStrategy等待策略分析4.Disruptor的高性能原因5.Disruptor高性...
- 线程的状态有哪些?它是如何工作的?
-
线程的状态有哪些?它是如何工作的?线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切...
- 有图解有案例,我终于把Condition的原理讲透彻了
-
平时加解锁都是直接使用Synchronized关键字来实现的,简单好用,为啥还要引用ReentrantLock呢?为了解决小伙伴的疑问,我们来对两者做个简单的比较吧:相同点两者都是“可重入锁”,即当前...
- 白话DUBBO原理,通俗易记,再也不怕面试时讲不清楚了
-
现在的各种面试免不了要问些中间件,尤其是互联网公司,更注重获选人对中间件的掌握情况。在中间件中,有一大类是关于RPC框架的,Dubbo即是阿里出品的一款很著名的RPC中间件,很多互联网公司都在用,面试...
- Java 最细的集合类总结(java常用的集合类有哪些)
-
数据结构作为每一个开发者不可回避的问题,而Java对于不同的数据结构提供了非常成熟的实现,这一个又一个实现既是面试中的难点,也是工作中必不可少的工具,在此,笔者经历漫长的剖析,将其抽丝剥茧的呈现出...
- 详解Java异常(Exception)处理及常见异常
-
很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如:你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊...
- 为什么阿里强制要求不要在foreach循环里进行元素remove和add操作
-
在阅读《阿里巴巴Java开发手册》时,发现有一条关于在foreach循环里进行元素的remove/add操作的规约,具体内容如下:错误演示我们首先在IDEA中编写一个在foreach循...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
- 标签列表
-
- 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)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)