Кілька виходів у комірку IPython Notebook


83

Я запускаю цю комірку в блокноті IPython:

# salaries and teams are Pandas dataframe
salaries.head()
teams.head()

Результат полягає в тому, що я отримую лише вихідні teamsдані фрейму даних, а не обох salariesі teams. Якщо я просто запускаю, salaries.head()я отримую результат для salariesфрейму даних, але при запуску обох операторів я просто бачу результат teams.head(). Як я можу це виправити?


`з IPython.core.interactiveshell import InteractiveShell 'InteractiveShell.ast_node_interactivity =" all "

Відповіді:


130

ви пробували displayкоманду?

from IPython.display import display
display(salaries.head())
display(teams.head())

16
З документації: "Оскільки IPython 5.4 та 6.1 display()автоматично надаються користувачеві без імпорту".
Георгій

Я використовую IPython 6.4.0, і мені довелося скористатися імпортом from IPython.display import display
GAURAV SRIVASTAVA

101

Простіший спосіб:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

Це заощаджує необхідність повторного введення "Дисплей"

Скажімо, клітинка містить це:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

a = 1
b = 2

a
b

Тоді на виході буде:

Out[1]: 1
Out[1]: 2

Якщо ми використовуємо IPython.display.display:

from IPython.display import display

a = 1
b = 2

display(a)
display(b)

Результат:

1
2

Тож те саме, але без Out[n]частини.


Це нове? Я не пам’ятаю, щоб бачив цей варіант пару років тому.
tglaria

1
Я навіть не бачу цього в оновленій документації: ipython.readthedocs.io/en/stable/api/generated/… Але є у "Терміналі" параметри IPython: ipython.readthedocs.io/en/stable/config/options /terminal.html
tglaria

2
О, чоловіче, я хотів би відповісти на це. Я пам’ятаю, як бачив це на іншому запитанні кілька місяців тому (хоч би я міг отримати джерело), ​​і він мені спрацював ідеально, тому я тримав його в задній кишені.
Ару Сінгх,

Було б непогано додати, як це буде поводитися, чи буде воно відображатися для кожного рядка?
матастер

1
Ви повинні використовувати get_ipython().ast_node_interactivity = 'all', а не замінювати властивість класу на постійний рядок!
Ерік,


4

IPython Notebook відображає лише останнє повернене значення в комірці. Найпростішим рішенням у вашому випадку є використання двох комірок.

Якщо вам дійсно потрібна лише одна комірка, ви можете зробити такий злом :

class A:
    def _repr_html_(self):
        return salaries.head()._repr_html_() + '</br>' + teams.head()._repr_html_()

A()

Якщо вам це потрібно часто, зробіть це функцією:

def show_two_heads(df1, df2, n=5):
    class A:
        def _repr_html_(self):
            return df1.head(n)._repr_html_() + '</br>' + df2.head(n)._repr_html_()
    return A()

Використання:

show_two_heads(salaries, teams)

Версія для більш ніж двох голів:

def show_many_heads(*dfs, n=5):
    class A:
        def _repr_html_(self):
            return  '</br>'.join(df.head(n)._repr_html_() for df in dfs) 
    return A()

Використання:

show_many_heads(salaries, teams, df1, df2)

0

Перерахування всіх рішень:

Порівнявши їх в інтерактивному сеансі:

In [1]: import sys

In [2]: display(1)          # appears without Out
   ...: sys.displayhook(2)  # appears with Out
   ...: 3                   # missing
   ...: 4                   # appears with Out
1
Out[2]: 2
Out[2]: 4

In [3]: get_ipython().ast_node_interactivity = 'all'

In [2]: display(1)          # appears without Out
   ...: sys.displayhook(2)  # appears with Out
   ...: 3                   # appears with Out (different to above)
   ...: 4                   # appears with Out
1
Out[4]: 2
Out[4]: 3
Out[4]: 4

Зверніть увагу, що поведінка в Jupyter точно така ж, як у ipython.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.