如何检查你是否在Jupyter笔记本电脑中

mgo*_*ser 14 python pandas jupyter jupyter-notebook

我正在创建一个python模块,其中包含一个显示pandas DataFrame(my_df)的函数.

如果用户将模块导入Jupyter笔记本,我想通过使用以下内容为DataFrame提供"漂亮"的格式:

from IPython.display import display, HTML
display(my_df)
Run Code Online (Sandbox Code Playgroud)

如果用户不在Jupyter笔记本中,我想显示DataFrame的文本格式:

print(my_df)
Run Code Online (Sandbox Code Playgroud)

如何检查代码是否从Jupyter笔记本运行?或者,如何从命令行以文本形式显示DataFrame,如果将HTML表单导入Jupyter笔记本,则显示HTML表单?

from IPython.display import display, HTML

def my_func(my_df):
    if [... code to check for Jupyter notebook here ...]:
        display(my_df)
    else:
        print(my_df)
Run Code Online (Sandbox Code Playgroud)

and*_*ece 10

您无需检查代码是否从Notebook运行; display()从命令行调用时打印文本.

test.py:

from IPython.display import display
import pandas as pd 

my_df = pd.DataFrame({'foo':[1,2,3],'bar':[7,8,9]})
display(my_df)
Run Code Online (Sandbox Code Playgroud)

从命令行:

$ python test.py 
   bar  foo
0    7    1
1    8    2
2    9    3
Run Code Online (Sandbox Code Playgroud)

来自Jupyter笔记本:

笔记本打印输出

更新
要检查您是否在交互式Ipython shell(命令行或基于浏览器)中运行,请检查get_ipython.(改编自Ipython文档)

修改test.py:

from IPython.display import display, HTML
import pandas as pd 
my_df = pd.DataFrame({'foo':[1,2,3],'bar':[7,8,9]})

try:
    get_ipython
    display(my_df)
except:
    print(my_df)
Run Code Online (Sandbox Code Playgroud)

这种方法将:
- 在浏览器中漂亮打印Jupyter笔记本
- 从命令行作为脚本运行时打印文本(例如python test.py)
- 如果在Python shell中逐行运行,它将不会变成交互式Ipython shell印刷后