pandas - hist - Mostrar DataFrame como tabla en iPython Notebook
plot kind='' bar (5)
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?
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()
obtendrá el HTML sin procesar y sin procesar.
También puede importar desde
IPython.core.display
con el mismo efecto.
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 contenga únicamente
df1
df2
y "imprimirá las hermosas tablas para ambos conjuntos de datos".
Parece que puede mostrar ambos dfs usando una coma en el medio 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")
Prefiero no jugar con HTML y usar tanta infraestructura nativa como sea 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:
from IPython.display import display
display(df) # OR
print df.to_html()