我无法将参数和/或访问变量从一个 jupyter 笔记本传递到另一个:
我遇到的第一个问题是使用 %run magic 命令时无法将参数从一个笔记本传递到另一个笔记本。 神奇命令文档。这是笔记本中的代码:
笔记本1:
import pandas as pd
import datetime
import mplfinance as mpf
import numpy as np
import os
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))
pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')
%run "notebook2.ipynb" 1 2
这是 Notebook 2 中的代码:
import pandas as pd
import datetime
import mplfinance as mpf
import numpy as np
import os
import sys
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))
pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')
print(sys.argv)
我得到的输出不包含我试图传递的任何变量。这是我的名字经过编辑的输出
['C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\ipykernel_launcher.py', '-f', 'C:\\Users\\Name\\AppData\\Roaming\\jupyter\\runtime\\kernel-dc8af21c-af3f-488f-bfef-10c7b8e8f8ea.json']
这是我尝试遵循的另一个 stackoverflow 答案,但没有成功链接
因此尝试另一条路线,我决定只存储我想从笔记本一传递到笔记本2的变量/数据帧。这是一个示例,其中包含 stackoverflow 上的答案,还有另一个。然而,当我尝试这样做时,我却没有运气。
笔记本1中的代码:
%store df
该单元的输出
Stored 'df' (DataFrame)
var = 1
%store var
该单元的输出
Stored 'var' (int)
%store -r df
%store -r var
错误信息
TypeError: 'PickleShareDB' object is not subscriptable
我不确定问题是什么,这是我当前的 jupyter 笔记本设置和版本控制。我尝试过重新启动内核。我也使用相同的内核。这些笔记本位于同一目录中。
当前 Jupyter 笔记本版本:
您引用的文档说明该文档适用于 IPython 并使用
.py
文件。因此,如果您更喜欢使用这些功能,请使用 Jupytext 将 notebook2 转换为 Python 文件。或者,继续阅读使用%run
不同的方式来完成大致相同的任务。
您可以在某种程度上将
%run
与笔记本一起使用。您已经看到它没有像您期望的那样传递参数。对于您的计划来说,重要的是,默认情况下,即使没有 -i
标志,它也会在与源笔记本相同的命名空间中运行它。
%run
:依靠第二个笔记本位于同一命名空间中来共享分配的变量对于
notebook1.ipynb
:
import pandas as pd
import datetime
#import mplfinance as mpf
import numpy as np
import os
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))
pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')
a = 1
b = 2
%run "notebook2.ipynb"
对于笔记本 2:
import pandas as pd
import datetime
#import mplfinance as mpf
import numpy as np
import os
import sys
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))
pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')
print(sys.argv)
print(a)
print(b)
(我注释掉了对我的环境不必制作你的玩具代码的包的引用,更多玩具。)