Mic*_*ael 1 python ipython ipython-notebook
我的问题是:如何编写可以访问IPython笔记本命名空间的IPython单元魔术?
IPython允许编写用户定义的单元格魔术.我的计划是创建一个绘图函数,它可以绘制一个或多个任意Python表达式(基于Pandas Series对象的表达式),其中单元格字符串中的每一行都是图表中的单独图形.
这是细胞魔法的代码:
def p(line, cell):
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
line_list = cell.split('\n')
counter = 0
for line in line_list:
df['series' + str(counter)] = eval(line)
counter += 1
plt.figure(figsize = [20,6])
ax = plt.subplot(111)
df.plot(ax = ax)
def load_ipython_extension(ipython):
ipython.register_magic_function(p, 'cell')
Run Code Online (Sandbox Code Playgroud)
该函数以字符串形式接收整个单元格内容.然后,该字符串由换行符拆分,并使用eval()进行评估.结果将添加到Pandas DataFrame中.最后,使用matplotlib绘制DataFrame.
用法示例:首先在IPython笔记本中定义Pandas Series对象.
import pandas as pd
ts = pd.Series([1,2,3])
Run Code Online (Sandbox Code Playgroud)
然后在IPython笔记本中调用魔法(下面的整个代码是一个单元格):
%%p
ts * 3
ts + 1
Run Code Online (Sandbox Code Playgroud)
此代码失败,并显示以下错误:
NameError: name 'ts' is not defined
Run Code Online (Sandbox Code Playgroud)
我怀疑问题是该p函数只接收ts * 3\n ts + 1字符串,并且它无法访问tsIPython笔记本的命名空间中定义的变量(因为该p函数是在单独的.py文件中定义的).
我的代码如何被更改,以便单元魔术可以访问tsIPython笔记本中定义的变量(因此不会因NameError而失败)?
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |