Zeigen Sie DataFrame als Tabelle in iPython Notebook an


244

Ich benutze ein iPython-Notebook. Wenn ich das mache:

df

Ich bekomme einen schönen Tisch mit Zellen. Wenn ich dies jedoch tue:

df1
df2 

Der erste schöne Tisch wird nicht gedruckt. Wenn ich das versuche:

print df1
print df2

Es druckt die Tabelle in einem anderen Format aus, das Spalten überschüttet und die Ausgabe sehr hoch macht.

Gibt es eine Möglichkeit, es zu zwingen, die schönen Tabellen für beide Datensätze auszudrucken?


15
display(df)(mit from IPython.display import display) oderprint df.to_html()
joris

3
@joris, dein Kommentar scheint die Frage zu beantworten. Könntest du ihn vielleicht als Antwort posten, damit die Frage nicht unbeantwortet bleibt?
Cristian Ciupitu

Antworten:


381

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()das rohe, nicht gerenderte HTML erhalten.

Sie können auch IPython.core.displaymit dem gleichen Effekt importieren


3
Ist es möglich, Python zu bitten, den Browser automatisch zu öffnen und anzuzeigen HTML(df2.to_html())?
Cina

@Cina Sie sollten in der Lage sein, den HTML-Code in eine Datei zu schreiben und dann Ihren bevorzugten Browser für diese Datei aufzurufen. Wie dies zu tun ist, hängt jedoch stark von dem System ab, auf dem Sie sich befinden, dem Browser usw.
nealmcb

2
HTML (df2.to_html ()) macht nichts. Sie sollten display (HTML (df2.to_html ())) ausführen, um den Datenrahmen zu rendern. Ich habe versucht, Ihre Antwort zu bearbeiten, aber irgendwie wurde sie abgelehnt.
Alyaxey

8
auf Version 5.6.0 müssen Sie nichtimport display
Joelb

Wie gehe ich mit verketteten Strings um? Zum Beispiel, um den gesamten Text aus Textspalten abzurufen.
Peter.k

51
from IPython.display import display
display(df)  # OR
print df.to_html()

5
Wie von @emunsing angegeben, funktioniert .to_html () nicht, es gibt eine nicht gerenderte HTML-Tabelle.
Mayank

44

Diese Antwort basiert auf dem zweiten Tipp aus diesem Blog-Beitrag: 28 Tipps, Tricks und Verknüpfungen für Jupyter-Notizbücher

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 einer eigenen Zeile zu drucken. Sie können dann eine Zelle ausführen, die nur enthält

df1
df2

und es wird "die schönen Tabellen für beide Datensätze ausdrucken".


3
Diese Lösung funktioniert wunderbar und löst das ursprünglich gestellte Problem. Vielen Dank!
Zertrin

16

Ich ziehe es vor, nicht mit HTML herumzuspielen und so viel native Infrastruktur wie möglich zu verwenden. 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:

Geben Sie hier die Bildbeschreibung ein


5

Es scheint, dass Sie beide dfs einfach mit einem Komma dazwischen in der Anzeige anzeigen können. Ich habe das auf einigen Notizbüchern 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")


1

Um den DataFrame in Jupyter Notebook anzuzeigen, geben Sie einfach Folgendes ein:

   Anzeige (Name_der_DatenFrame)

beispielsweise:

  Anzeige (df)

0

So zeigen Sie in einer Liste enthaltene Datenrahmen an:

display(*dfs)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.