笔记本单元多输出

我在 IPython 笔记本上运行这个单元:

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

结果是我只得到了 teams数据帧的输出,而不是 salariesteams的输出。如果我只运行 salaries.head(),我会得到 salaries数据帧的结果,但是在同时运行这两个语句时,我只看到 teams.head()的输出。我该怎么纠正呢?

63706 次浏览

IPython Notebook shows only the last return value in a cell. The easiest solution for your case is to use two cells.

If you really need only one cell you could do a hack like this:

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


A()

If you need this often, make it a function:

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()

Usage:

show_two_heads(salaries, teams)

A version for more than two heads:

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()

Usage:

show_many_heads(salaries, teams, df1, df2)

Provide,

print salaries.head()
teams.head()

have you tried the display command?

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

An easier way:

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

It saves you having to repeatedly type "Display"

Say the cell contains this:

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


a = 1
b = 2


a
b

Then the output will be:

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

If we use IPython.display.display:

from IPython.display import display


a = 1
b = 2


display(a)
display(b)

The output is:

1
2

So the same thing, but without the Out[n] part.

Enumerating all the solutions:

Comparing these in an interactive session:

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

Note that the behavior in Jupyter is exactly the same as it is in ipython.

This works if you use the print function since giving direct commands only returns the output of last command. For instance,

salaries.head()
teams.head()

outputs only for teams.head()

while,

print(salaries.head())
print(teams.head())

outputs for both the commands.

So, basically, use the print() function