我把我的Jupyter笔记本整理成:数据。ipynb
,方法。ipynb
和结果。ipynb
。如何从数据和方法笔记本中有选择地导入单元格,以便在结果笔记本中使用?
我知道nbimport
和ipynb
,但这两者都不提供变量的选择性导入。有一个导入定义的选项——包括大写的变量——但这对我不起作用,因为我必须将笔记本中的大多数变量转换为大写。
我宁愿导入所有内容,除了两三个需要很长时间才能计算的单元格。理想情况下,我希望将某些任务的执行推迟到我访问它们的那一刻(惰性评估)——但我知道这可能很难实现。
以下是伪代码的概述(每行代表一个单元格):
data.ipynb
:
raw_data = load_data()
dataset = munge(raw_data)
describe(dataset) # I want this line to be skipped at import
方法。ipynb
:
import data
method = lambda x: x * x
# showcase how the method works on a subset of the dataset
method(data.dataset[:5]) # I want this line to be skipped at import
结果。ipynb
:
import data
import methods
result = methods.method(data.dataset)
describe(result)
动机是我的真实数据和方法笔记本:
此外,方法笔记本不能替换为方法。py
文件。事实上,我有这样一个文件,其中包含我的方法的实现细节。笔记本更像是一个指定默认参数、展示我的方法如何工作以及解释示例结果的地方。
这个问题本质上是以下因素的结合:
我通读了这两个问题的答案,没有一个能满足我的要求。
在下面的回答中,我提出了使用自定义单元格魔法和猴子修补的解决方案。然而,我更喜欢一种解决方案,它允许指定哪些单元格/表达式要排除/包括,而不是在原始笔记本中(例如data.ipynb
),而是在目标笔记本中(例如methods.ipynb
)。
例如,它可以使用正则表达式:
# all variables starting with 'result' would be ignored
nbimporter.options['exclude'] = '^result.*'
或者(更好的)懒惰的评价:
# only `a` and `b` would be evaluated and imported
from data import a, b
所有想法都将受到赞赏!
到目前为止,我一直在修补nbimport
,并选择单元格来排除使用单元格魔法:
from IPython.core import magic
@magic.register_cell_magic
def skip_on_import(args, cell):
get_ipython().ex(cell)
用于修补cell remover的代码:
import ast
class SkippingTransformer(ast.NodeTransformer):
# usage:
# import nbimporter
# nbimporter.CellDeleter = SkippingTransformer
def visit(self, node):
if (
isinstance(node, ast.Expr)
and isinstance(node.value, ast.Call)
and isinstance(node.value.func, ast.Attribute)
and node.value.func.attr == 'run_cell_magic'
and node.value.args[0].s == 'skip_on_import'
):
return
return node
还有一个实际的例子,数据。ipynb
:
和methods.ipynb
(结尾处的异常是有意的-它意味着成功!):
编辑:我在一段时间前发布了上面的代码作为jupyter助手的一部分。使用此软件包,只需导入导入笔记本中的进口商:
from jupyter_helpers.selective_import import notebooks_importer
细胞魔法可以在进口笔记本中导入:
from jupyter_helpers.selective_import import skip_on_import
下面是导入笔记本的示例:数据。ipynb和导入笔记本的示例:结果。ipynb
我的数据库中有两个表。一个表包含有关用户的信息,而另一个表包含有关预订的数据。当用户进行预订时,userid将被放置在预订表中。现在,我想展示一张用户的照片,其中包括预订的备注和日期,但是照片在users表中。 这是我的两张桌子: null null
我想将一些通用功能外包给一个模块中的多个笔记本电脑(也用于测试目的)。当前目录结构如下所示 在中,有一个简单的函数 然而,当我想导入和使用在通过使用(我认为有意义的) 我得到一个。我做错了什么?我正在使用Python 3.9。
问题内容: 我正在寻找一个SQL查询来选择所有未由同一表上的另一个查询选择的记录。具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中一个记录以外的所有记录。 因此,一条select语句可能类似于以下内容(不起作用!): 如果不可能进行单个查询,那么最有效的解决方案是什么? 问题答案: 具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中
问题内容: 我正在尝试查找一个表中的行,而不是另一个表中的行,这两个表都在不同的数据库中,并且在我要用来匹配的列上也有不同的列名。 我有一个查询,下面的代码,我认为它可能有效,但是速度太慢: 因此查询尝试执行以下操作: 从R2R.partmaster数据库中选择wpsapi4.product_details数据库中没有的所有ID。我匹配的列是partmaster.id和product_detail
问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。
非常感谢任何帮助。 编辑:我不敢相信我居然要明确声明我不想复制粘贴它。