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?

Lokesh
fuente
`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())
tglaria
fuente
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.

Aru Singh
fuente
¿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()
WoodChopper
fuente
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)
Mike Müller
fuente
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.

Eric
fuente