2017-05-21 30 views
8

我正在創建一個python模塊,並帶有一個顯示熊貓數據框的功能(my_df)。如何檢查你是否在一個Jupyter筆記本

如果用戶導入模塊插入Jupyter筆記本,我想使用類似提供「漂亮」的格式化數據幀:

from IPython.display import display, HTML 
display(my_df) 

如果用戶不在Jupyter筆記本,我想要顯示DataFrame的文本格式:

print(my_df) 

如何檢查代碼是否從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) 

回答

6

你並不需要檢查,如果代碼正在從筆記本電腦上運行;從命令行調用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) 

從命令行:

$ python test.py 
    bar foo 
0 7 1 
1 8 2 
2 9 3 

從Jupyter筆記本:

notebook printout

UPDATE
要檢查您是否在交互式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) 

這種方式會:
- 漂亮地打印在瀏覽器中Jupyter筆記本
- 打印文本時,如通過命令行腳本運行(例如python test.py
- 如果在Python shell中逐行運行,它在打印後不會變成交互式Ipython shell

+0

在交互式python shell中,這將整個shell變成Jupyter筆記本樣式CLI。 – mgoldwasser

+0

的確如此 - 您在文章中沒有提到任何有關從交互式Python shell運行的內容。從一個簡單的命令行調用它可以根據需要工作。 –

+0

有關解決交互式CLI問題,請參閱我的更新答案。 –

0

你應該看看os.environ。

我的機器上,你可以看到它在

os.environ['_'] 
+0

某些shell將設置_環境v可以成爲最後一道工序。雖然這可能起作用,但它不是真的可靠,我懷疑有一個比這取決於更好的答案。 –