IPython Notebook cell multiple outputs

后端 未结 5 609
攒了一身酷
攒了一身酷 2020-12-22 17:34

I am running this cell in IPython Notebook:

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

The result is that I am

相关标签:
5条回答
  • 2020-12-22 18:11

    Provide,

    print salaries.head()
    teams.head()
    
    0 讨论(0)
  • 2020-12-22 18:12

    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)
    
    0 讨论(0)
  • 2020-12-22 18:19

    Enumerating all the solutions:

    • sys.displayhook(value), which IPython/jupyter hooks into. Note this behaves slightly differently from calling display, as it includes the Out[n] text. This works fine in regular python too!

    • display(value), as in this answer

    • get_ipython().ast_node_interactivity = 'all'. This is similar to but better than the approach taken by this answer.

    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.

    0 讨论(0)
  • 2020-12-22 18:21

    have you tried the display command?

    from IPython.display import display
    display(salaries.head())
    display(teams.head())
    
    0 讨论(0)
  • 2020-12-22 18:27

    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.

    0 讨论(0)
提交回复
热议问题