Ich benutze iPython Notebook. Wenn ich das mache:
df
Ich bekomme einen schönen Tisch mit Zellen. Wenn ich das mache:
df1
df2
die erste schöne Tabelle wird nicht gedruckt. Wenn ich das versuche:
print df1
print df2
Es druckt die Tabelle in einem anderen Format aus, das Spalten überdeckt und die Ausgabe sehr groß macht.
Gibt es eine Möglichkeit, es zu zwingen, die schönen Tabellen für beide Datensätze auszudrucken?
Sie müssen die Funktionen HTML()
oder display()
aus dem IPython-Anzeigemodul verwenden:
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()))
Beachten Sie, dass Sie, wenn Sie nur print df1.to_html()
eingeben, das rohe, nicht gerenderte HTML erhalten.
Mit dem gleichen Effekt können Sie auch aus IPython.core.display
importieren
from IPython.display import display
display(df) # OR
print df.to_html()
Diese Antwort basiert auf dem zweiten Tipp dieses Blog-Beitrags: 28 Jupyter Notebook-Tipps, Tricks und Verknüpfungen
Sie können den folgenden Code oben in Ihr Notizbuch einfügen
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Dies weist Jupyter an, die Ergebnisse für jede Variable oder Anweisung in der eigenen Zeile zu drucken. So können Sie dann eine Zelle ausführen, die nur enthält
df1
df2
und es wird "die schönen Tabellen für beide Datensätze ausdrucken".
Ich spiele lieber nicht mit HTML und benutze so viel native Infrastruktur wie möglich. Sie können das Ausgabe-Widget mit Hbox oder VBox verwenden:
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
Dies gibt aus:
Anscheinend können Sie beide dfs einfach mit einem Komma dazwischen anzeigen. Ich habe das bei einigen Notebooks auf Github bemerkt. Dieser Code stammt aus dem Notizbuch von 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")