it-swarm.com.de

Zeigen Sie DataFrame als Tabelle in iPython Notebook an

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?

196
Chris

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

312
emunsing
from IPython.display import display
display(df)  # OR
print df.to_html()
43
JacobWuzHere

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".

35
Jonny Brooks

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:

enter image description here

7
Shital Shah

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

4
Moondra