Múltiples salidas de celda de IPython Notebook


82

Estoy ejecutando esta celda en IPython Notebook:

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

El resultado es que solo obtengo el resultado del teamsmarco de datos en lugar de ambos salariesy teams. Si solo ejecuto salaries.head(), obtengo el resultado para salariesel marco de datos, pero al ejecutar ambas declaraciones, solo veo el resultado de teams.head(). ¿Cómo puedo corregir esto?


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

Respuestas:


126

has probado el displaycomando?

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

16
De los documentos: "Dado que IPython 5.4 y 6.1 display()está automáticamente disponible para el usuario sin importar".
Georgy

Estoy usando IPython 6.4.0 y tuve que usar la declaración de importación from IPython.display import display
GAURAV SRIVASTAVA

99

Una forma más sencilla:

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

Le ahorra tener que escribir repetidamente "Pantalla"

Digamos que la celda contiene esto:

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

a = 1
b = 2

a
b

Entonces la salida será:

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

Si usamos IPython.display.display:

from IPython.display import display

a = 1
b = 2

display(a)
display(b)

La salida es:

1
2

Entonces lo mismo, pero sin la Out[n]parte.


¿Es esto nuevo? No recuerdo haber visto esta opción hace un par de años.
tglaria

1
Ni siquiera lo veo en la documentación actualizada: ipython.readthedocs.io/en/stable/api/generated/… Pero está en las opciones de IPython de "Terminal": ipython.readthedocs.io/en/stable/config/options /terminal.html
tglaria

2
Oh hombre, desearía poder responder eso. Recuerdo haberlo visto en una pregunta diferente hace meses (desearía poder obtener) y funcionó perfectamente para mí, así que lo guardé en mi bolsillo trasero.
Aru Singh

Sería bueno agregar cómo se comportará esto, ¿se mostrará para todas y cada una de las líneas?
matanster

1
¡Debería usar get_ipython().ast_node_interactivity = 'all', no reemplazar la propiedad de clase con una cadena constante!
Eric

4

Proporcionar,

print salaries.head()
teams.head()

5
Agradable pero la salida de print salaries.head()no está bien formateada.
Lokesh

4

IPython Notebook muestra solo el último valor de retorno en una celda. La solución más sencilla para su caso es utilizar dos celdas.

Si realmente necesita solo una celda, puede hacer un truco como este:

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

A()

Si necesita esto a menudo, conviértalo en una función:

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

Uso:

show_two_heads(salaries, teams)

Una versión para más de dos cabezas:

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

Uso:

show_many_heads(salaries, teams, df1, df2)

0

Enumerando todas las soluciones:

Comparando estos en una sesión interactiva:

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

Tenga en cuenta que el comportamiento en Jupyter es exactamente el mismo que en ipython.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.