在Excel中使用嵌入式Python Jupyter Notebooks

在这里插入图片描述

使用Excel还是Python Jupyter Notebook处理数据曾经是一个非此即彼的选择。现在,随着PyXLL-Jupyter软件包的推出,您可以将两者一起使用。

本文将向您介绍如何设置在Excel中运行Jupyter Notebook 。在这两者之间共享数据,甚至可以从Excel工作簿调用Jupyter笔记本中编写的Python函数!

图片

一、入门

首先,在EXCE运行Python代码你需要PyXLL插件。PyXLL插件使我们可以将Python集成到Excel中,并使用Python代替VBA。要安装PyXLL Excel插件,可以在命令行运行“ pip install pyxll”,然后使用PyXLL命令行工具安装Excel加载项:

>>pip install pyxll
>> pyxll install

如果您是PyXLL的新手,请阅读 新手入门在线文档 ,以帮助您入门。

请注意,PyXLL是商业软件。它包括30天的免费试用期,但需要在试用期后购买使用许可证。

一旦安装了PyXLL Excel插件,下一步就是安装pyxll-jupyter软件包。这个软件包将PyXLL和Jupyter粘合在一起,因此我们可以在Excel中使用Jupyter笔记本。

使用pip安装pyxll-jupyter软件包:

>> pip install pyxll-jupyter

一旦安装了PyXLL Excel插件和PyXLL-Jupyter软件包,就启动Excel,您将在PyXLL选项卡中看到一个新的“ Jupyter”按钮。

图片

单击此按钮可在Excel工作簿的侧面板中打开Jupyter笔记本。该面板是Excel界面的一部分,可以通过拖放操作取消停靠或停靠在其他位置。

在Jupyter面板中,您可以选择一个现有的笔记本或创建一个新的笔记本。要创建一个新的笔记本,请选择“新建”按钮,然后选择“ Python 3”。

图片

图片

二、这有什么用?

现在,您已经在Excel中运行了完整的Jupyter笔记本!但是,这有什么好处呢?这比在Excel外部运行笔记本更好?

好了,现在您可以使用Excel处理数据,并使用Python处理相同的数据。将Excel用作用于组织和可视化数据的交互式游乐场,无缝切换到Python以使用更复杂的工具。

将Jupyter笔记本写草稿,试运行Python代码。在Jupyter笔记本中全部使用Python编写Excel函数,并对其进行实时测试。开发了有用的可重用函数后,请将其添加到PyXLL Python项目中。这样,您每次使用Excel时都可以使用相同的功能。

在本文的其余部分,我将向您展示如何:

· 使用Jupyter笔记本在Excel和Python之间共享数据

· 在笔记本中编写Excel工作表函数(UDF)

· 使用Python而不是VBA的脚本Excel

1. 将数据从Excel导入Python

由于PyXLL在与Excel相同的过程中运行Python,因此在Python中访问Excel数据以及在Python和Excel之间进行调用很快。

为了使事情变得尽可能简单,pyxll-jupyter软件包附带了一些IPython“魔术”函数,供您在Jupyter笔记本中使用。

%xl_get

图片将数据导出到Jupyter Notebook中的Pandas DataFrames。图片由作者提供。

使用魔术函数“%xl_get”来获取Python中当前Excel中选择的区域。如果在Excel中有数据表的话,可以选择左上角(或整个范围),然后在Jupyter笔记本中输入“%xl_get”,瞧!Excel表格就变成了pandas DataFrame。

注意:%xl_get 魔术函数需要“ pywin32”软件包。您可以通过运行以下命令进行安装:

点安装“ pywin32 == 228”

如果您收到“ DLL加载失败”错误,则可能是由于pywin32软件包的300版本中的错误引起的。使用上面的命令安装以前的版本(228)。此错误已在pywin32中修复,但尚未发布。

%xl_get魔术函数有几个选项:

· -c或–cell。通过单元格的地址获取单元格的值,例如%xl_get --cell A1:D5。

· -t或–type。指定获取值时要使用的数据类型,例如%xl_get --type numpy_array。

· -x或–no-auto-resize。仅获取选定范围或给定范围的数据。不要扩展到包括周围的数据范围。

PyXLL还有其他与Excel交互以将数据读入Python的方式。“%xl_get”魔术功能只是使事情变得更简单的捷径!当Jupyter笔记本在Excel中运行时,所有其他方法(例如,使用XLCell类,Excel的COM API甚至xlwings)仍然可用。

提示:您可以为魔术函数的运行结果赋值给一个变量!例如,尝试“ df =%xl_get”。

2. 将Python中的数据移回Excel

图片

魔术函数“%xl_set”使用一个Python对象并将其写入Excel。在Excel中是否有想要的数据框“ df”?没问题,只需使用“%xl_set df”,它将被写入Excel中当前选择的区域。

-c或–cell
注意:%xl_set魔术函数需要“ pywin32”软件包。您可以通过运行以下命令进行安装:

点安装“ pywin32 == 228”

如果您收到“ DLL加载失败”错误,则可能是由于pywin32软件包的300版本中的错误引起的。使用上面的命令安装以前的版本(228)。此错误已在pywin32中修复,但尚未发布。

与%xl_get一样,%xl_set也具有一系列选项来控制其行为。您甚至可以使用PyXLL的单元格格式设置功能在将结果写入Excel的同时自动应用格式设置。

· -c或–cell。将值写入到单元格地址,例如%xl_set VALUE --cell A1。

· -t或–type。将值写入Excel时要使用的数据类型,例如%xl_set VALUE --type dataframe<index=False>。

· -f或–formatter。PyXLL单元格格式化程序对象,例如%xl_set VALUE --formatter DataFrameFormatter()。请参阅单元格格式。

· -x或–no-auto-resize。不要自动调整范围大小以适合数据。仅将值写入当前选择或指定范围。

与%xl_get一样,%xl_set只是一个快捷方式,您可能已与PyXLL一起使用的所有其他写回Excel的方式仍然可以在Jupyter笔记本中使用。

3. 在Excel中使用Python图(matplotlib/plotly)

关于数据处理的一大优点是可用的功能强大的绘图程序包。能够使用简单的“ df.plo()”绘制Pandas DataFrame是非常棒的一件事!

PyXLL集成了所有主要的绘图库,因此您也可以在Excel中充分利用它们。这包括matplotlib(pandas使用的绘图库),plotly,bokeh和altair。

%xl_plot

在这里插入图片描述

可以使用“%xl_plot”在Excel中绘制任何Python图表。从一个受支持的绘图库中向其传递任何图形对象,或使用最后一个pyplot图形。使用Pandas工作效果很好,例如。%xl_plot df.plot(kind=‘scatter’)。

%xl_plot魔术函数具有一些选项来控制其工作方式:

· -n或–name。Excel中图片对象的名称。如果使用已经存在的图片名称,则该图片将被替换。

· -c或–cell。用作新图片位置的单元格地址。如果图片已经存在,则无效。

· -w或–width。Excel中图片的宽度(以磅为单位)。如果更新现有图片,则无效。

· -h或–height。Excel中图片的高度(以磅为单位)。如果更新现有图片,则无效。

%xl_plot是pyxll.plot函数的快捷方式。

4. 从Excel调用Python函数

您可以直接从Excel工作簿中调用Python函数,而不需要在Excel和Jupyter之间不断移动数据然后运行Python代码!

PyXLL的主要用例之一是用Python编写自定义Excel工作表函数(或“ UDF”)。这样就可以使用Python函数构建Excel中的模型,这些函数当然可以使用其他Python工具箱(例如pandas和scipy)。

您也可以在Jupyter笔记本中编写Excel工作表函数。这是在不离开Excel即可使用Python IDE的情况下尝试想法的绝佳方法。

自己试试吧。编写一个简单的函数,然后将“ pyxll.xl_func”修饰符添加到您的函数中:

from pyxll import xl_func

@xl_func
def test_func(a, b, c):
    # This function can be called from Excel!!
    return (a * b) + c

输入代码并在Jupyter中运行单元后,Python函数将立即可从Excel工作簿中调用。

不只是简单的功能。您可以将整个数据范围作为pandas DataFrames传递给函数,并返回任何Python类型,包括numpy数组和DataFrames!您可以通过给@xl_func装饰器一个签名字符串来告诉PyXLL期望什么类型。

例如,尝试以下方法:

from pyxll import xl_func

# The "signature" tells PyXLL how to convert the arguments

# and returned value.

@xl_func("dataframe df: dataframe<index=True>", auto_resize=True)

def df_describe(df):

    # 'df' is a pandas DataFrame built from the range passed

    # to this function.

    desc = df.describe()

    # 'desc' is a new DataFrame, which PyXLL will convert to

    # a range of values when returning to Excel.

    return desc

现在,您可以编写复杂的Python函数来进行数据转换和分析,同时可以在Excel中如何调用这些函数。更改输入会导致调用函数,并且实时更新计算结果,和您期望的一模一样!

5. 使用Python而不是VBA的脚本

您是否知道在VBA中可以执行的所有操作也可以在Python中完成?编写VBA时将使用Excel对象模型,但是Python也提供相同的API。

有关如何实现此操作的详细信息,请参阅PyXLL文档中的Python作为VBA替代品。

在Excel中运行的Jupyter笔记本中,可以使用整个Excel对象模型,因此您可以使用与Excel VBA编辑器中完全相同的方式编写Excel脚本。

由于PyXLL在Excel进程内运行Python ,因此从Python调用Excel不会对性能造成任何影响。也可以从外部Python进程调用Excel,但这通常要慢得多。在Excel中运行Jupyter笔记本也使一切变得更加便捷!

使用PyXLL的xl_app函数获取“ Excel.Application”对象,该对象等效于VBA中的Application对象。尝试进行诸如获取当前选择和更改单元格内部颜色之类的操作。弄清楚如何使用Excel对象模型进行操作的一种好方法是记录VBA宏,然后将该宏转换为Python!PyXLL文档页面Python作为VBA的替代品提供了一些有关如何做到这一点的技巧。

在这里插入图片描述

三、概要

Python是VBA的强大替代品。使用PyXLL,您可以完全用Python编写功能齐全的Excel插件。Excel是一种出色的交互式计算工具。添加Python和Jupyter将Excel提升到一个全新的水平。

使用Jupyter笔记本编写的代码可以轻松地重构为独立的Python包,从而创建可以生成可以在Excel中生成直观的工作簿和仪表板的强大工具包。这使得任何Excel用户都将能够利用使用PyXLL编写的Python工具,而无需任何Python知识。

如果您想了解更多信息,请下载并自己尝试PyXLL。

参考链接:

· Excel中的Python Jupyter笔记本| PyXLL

· Jupyter项目

· 用Python编写Excel加载项(pyxll.com)

原文链接:https://towardsdatascience.com/python-jupyter-notebooks-in-excel-5ab34fc6439

  • End -

更多AI最新消息,请关注《派派AI学院》👇

https://www.pypyai.com/

图片

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值