数据框的魔术存储命令如何工作?

how does the magic store commands for dataframe work?

我分别在两个 jupyter 笔记本(N1 和 N2)中创建了两个数据帧(df1 和 df2)。

第 1 天,我使用下面的存储命令在 N2 jupyter notebook

中使用 df1 及其变量
%store -r df1

但是在第 25 天,我创建了一个新的 jupyter notebook N3 并再次使用了下面的存储命令

%store -r df1

它似乎很容易将数据框 df1 的所有细节拉入 N3 jupyter notebook?

这是如何工作的?

它们不是只对特定的 jupyter notebook 会话有效吗?

那么我们可以不将所有数据帧存储为文件,而是可以随时执行存储命令并 store/retrieve 轻松地存储它们吗?

%store 魔术命令将变量存储在 IPython 的数据库中(它实际上是在后端使用 pickle 来存储),以便您稍后在不同的笔记本或会话中恢复它。

例如

>>> myvar = "store this string"
>>> %store myvar
Stored 'myvar' (str)
>>> %store
Stored variables and their in-db values:
myvar             -> 'store this string'

现在,您可以恢复这个变量

>>> %store -r myvar
>>> myvar
'store this string'

Storemagic 是一个 IPython 功能,“在 IPython 的数据库中存储变量、别名和宏”。因为它是一个 IPython 功能而不是 Jupyter 独有的,所以您可以在许多 IPython 和 Jupyter 会话中存储和恢复变量。

在我的环境 (IPython 7.19.0) 中,变量存储在目录中:

$HOME/.ipython/profile_default/db/autorestore

使用%store <name>存储时,每个文件存储一个。文件本身是存储变量的 pickled 表示。您可以使用以下方法手动加载变量:

import pickle

# Name of the previously stored variable
stored_var = 'test'

# myvar will contain the variable previously stored with "%store test"
myvar_filename = get_ipython().ipython_dir + '/profile_default/db/autorestore/' + stored_var
with open(myvar_filename, 'rb') as f:
    myvar = pickle.load(f)