125

I am running this cell in IPython Notebook:

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

The result is that I am only getting the output of teams data-frame rather than of both salaries and teams. If I just run salaries.head() I get the result for salaries data-frame but on running both the statement I just see the output of teams.head(). How can I correct this?

0

6 Answers 6

180

have you tried the display command?

from IPython.display import display
display(salaries.head())
display(teams.head())
Sign up to request clarification or add additional context in comments.

2 Comments

From the docs: "Since IPython 5.4 and 6.1 display() is automatically made available to the user without import."
I am using IPython 6.4.0 and I had to use the import statement from IPython.display import display
160

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.

10 Comments

Is this new? I don't recall seeing this option a couple of years ago.
I don't even see it in the updated documentation: ipython.readthedocs.io/en/stable/api/generated/… But is on the "Terminal" IPython options: ipython.readthedocs.io/en/stable/config/options/terminal.html
Oh man, I wish I could answer that. I remember seeing it on a different question months ago (I wish I could source) and it worked perfectly for me so I've kept it in my back pocket.
You should be using get_ipython().ast_node_interactivity = 'all', not replacing the class property with an constant string!
See this answer to make this config change common across all notebooks
|
8

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.

3 Comments

How do we reset it to exhibit the original behaviour once invoked by setting ast_node_interactivity to 'all'?
Asked too quickly!! it should be set to get_ipython().ast_node_interactivity = 'last_expr' to revert to the default behaviour. Other possible options are 'none', 'last' and 'last_expr_or_assign'.
"as it includes the Out[n] text" - Not just that, it also saves the result, though only the last result if there are multiple. For me, I want to show a Pandas dataframe then its dtypes from the same cell and save the dataframe, so I do df then display(df.dtypes).
5

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)

Comments

2

Provide,

print salaries.head()
teams.head()

2 Comments

Nice but output of print salaries.head() is not well formatted.
use display() as for print output will not be well formatted.
1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.