Несколько выходов ячеек IPython Notebook


83

Я запускаю эту ячейку в IPython Notebook:

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

В результате я получаю вывод только teamsкадра данных, а не обоих salariesи teams. Если я просто запускаю, salaries.head()я получаю результат для salariesкадра данных, но при запуске обоих операторов я просто вижу результат teams.head(). Как я могу это исправить?


`from 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"

Это избавляет вас от необходимости многократно набирать "Display"

Скажем, ячейка содержит это:

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.