Mostrar DataFrame como tabla en iPython Notebook

245

Estoy usando el portátil iPython. Cuando hago esto:

df

Tengo una hermosa mesa con celdas. Sin embargo, si hago esto:

df1
df2 

no imprime la primera hermosa mesa. Si intento esto:

print df1
print df2

Imprime la tabla en un formato diferente que derrama columnas y hace que la salida sea muy alta.

¿Hay alguna manera de obligarlo a imprimir las hermosas tablas para ambos conjuntos de datos?

Chris
fuente
15
display(df)(con from IPython.display import display), oprint df.to_html()
joris
3
@joris, su comentario parece responder a la pregunta, ¿podría publicarlo como respuesta para que la pregunta no quede sin respuesta?
Cristian Ciupitu

Respuestas:

384

Deberá usar las funciones HTML()o display()del módulo de visualización de IPython:

from IPython.display import display, HTML

# Assuming that dataframes df1 and df2 are already defined:
print "Dataframe 1:"
display(df1)
print "Dataframe 2:"
display(HTML(df2.to_html()))

Tenga en cuenta que si solo print df1.to_html()obtiene el HTML sin procesar y sin procesar.

También puedes importar IPython.core.displaycon el mismo efecto

emunsing
fuente
3
¿Es posible pedirle a Python que abra y muestre automáticamente el navegador HTML(df2.to_html())?
Cina
@Cina Debería poder escribir el HTML en un archivo y luego llamar a su navegador favorito en ese archivo, pero cómo hacerlo depende mucho del sistema en el que se encuentre, el navegador, etc.
nealmcb
2
HTML (df2.to_html ()) no hace nada. Debe mostrar (HTML (df2.to_html ())) para representar el marco de datos. Traté de editar su respuesta, pero de alguna manera fue rechazada.
alyaxey
8
en la versión 5.6.0 no es necesarioimport display
joelb
¿Cómo lidiar con cadenas concatenadas? Por ejemplo, para obtener todo el texto de las columnas de texto.
Peter.k
51
from IPython.display import display
display(df)  # OR
print df.to_html()
JacobWuzHere
fuente
55
Según lo indicado por @emunsing, .to_html () no funciona, da una tabla html sin procesar.
mayank
44

Esta respuesta se basa en el segundo consejo de esta publicación de blog: 28 consejos, trucos y accesos directos de Jupyter Notebook

Puede agregar el siguiente código en la parte superior de su computadora portátil

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

Esto le dice a Jupyter que imprima los resultados para cualquier variable o declaración en su propia línea. Entonces puede ejecutar una celda que contiene únicamente

df1
df2

y "imprimirá las hermosas tablas para ambos conjuntos de datos".

Jonny Brooks
fuente
3
Esta solución funciona de maravilla y resuelve el problema original solicitado. ¡Gracias!
Zertrin
16

Prefiero no jugar con HTML y usar la mayor cantidad de infraestructura nativa posible. Puede usar el widget de salida con Hbox o VBox:

import ipywidgets as widgets
from IPython import display
import pandas as pd
import numpy as np

# sample data
df1 = pd.DataFrame(np.random.randn(8, 3))
df2 = pd.DataFrame(np.random.randn(8, 3))

# create output widgets
widget1 = widgets.Output()
widget2 = widgets.Output()

# render in output widgets
with widget1:
    display.display(df1)
with widget2:
    display.display(df2)

# create HBox
hbox = widgets.HBox([widget1, widget2])

# render hbox
hbox

Esto produce:

ingrese la descripción de la imagen aquí

Shital Shah
fuente
5

Parece que puede mostrar ambos dfs usando una coma en la pantalla. Me di cuenta de esto en algunos cuadernos en github. Este código es del cuaderno de Jake VanderPlas.

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args

    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                     for a in self.args)

    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                       for a in self.args)

display('df', "df2")

Moondra
fuente
1

Para mostrar el DataFrame en Jupyter Notebook simplemente escriba:

   display (Name_of_the_DataFrame)

por ejemplo:

  pantalla (df)
Hossein SLT
fuente
0

Para mostrar marcos de datos contenidos en una lista:

display(*dfs)
BSalita
fuente