Ich habe zwei Pandas-Datenrahmen und möchte sie im Jupyter-Notizbuch anzeigen.
So etwas tun wie:
display(df1)
display(df2)
Zeigt sie untereinander:
Ich hätte gerne einen zweiten Datenrahmen rechts vom ersten. Es gibt eine ähnliche Frage , aber es sieht so aus, als ob eine Person damit zufrieden ist, sie in einem Datenrahmen zusammenzuführen, um den Unterschied zwischen ihnen zu zeigen.
Das wird bei mir nicht funktionieren. In meinem Fall können Datenrahmen völlig unterschiedliche (nicht vergleichbare) Elemente darstellen und ihre Größe kann unterschiedlich sein. Mein Hauptziel ist es daher, Platz zu sparen.
pandas
ipython-notebook
jupyter-notebook
Salvador Dali
quelle
quelle
Antworten:
Sie können das CSS des Ausgabecodes überschreiben. Es
flex-direction: column
wird standardmäßig verwendet. Versuchen Sie esrow
stattdessen zu ändern . Hier ist ein Beispiel:Sie können das CSS natürlich weiter anpassen, wie Sie möchten.
Wenn Sie nur auf die Ausgabe einer Zelle abzielen möchten, verwenden Sie den
:nth-child()
Selektor. Mit diesem Code wird beispielsweise das CSS der Ausgabe nur der 5. Zelle im Notizbuch geändert:quelle
HTML('<style>{}</style>'.format(CSS))
die letzte Zeile in der Zelle ist (und vergessen Sie nicht, den n-ten untergeordneten Selektor zu verwenden). Dies kann jedoch zu Problemen bei der Formatierung führen, sodass Ihre Lösung besser ist. (+1)HTML('<style>.output {flex-direction: row;}</style>')
der Einfachheit halberAm Ende habe ich eine Funktion geschrieben, die dies kann:
Anwendungsbeispiel:
quelle
*args
statt nur verwendetdf
? Liegt es daran, dass Sie mehrere Eingaben mit haben können*args
? 2) Welcher Teil Ihrer Funktion bewirkt, dass der 2. und der nachfolgende df rechts vom ersten anstatt darunter hinzugefügt werden? Ist es das'table style="display:inline"'
Teil?Styler
s und nichtDataFrame
s. In diesem Fall verwenden Siehtml_str+=df.render()
anstelle vonhtml_str+=df.to_html()
.Ausgehend von
pandas 0.17.1
der Visualisierung von DataFrames können direkt mit Pandas-Styling-Methoden geändert werdenUm zwei DataFrames nebeneinander anzuzeigen, müssen Sie
set_table_attributes
das"style='display:inline'"
in ntg answer vorgeschlagene Argument verwenden . Dies gibt zweiStyler
Objekte zurück. Um die ausgerichteten Datenrahmen anzuzeigen, übergeben Sie einfach ihre verknüpfte HTML-Darstellung durch diedisplay_html
Methode von IPython.Mit dieser Methode ist es auch einfacher, andere Styling-Optionen hinzuzufügen. So fügen Sie eine Beschriftung hinzu, wie hier angefordert :
quelle
Durch die Kombination der Ansätze von Gibbone (zum Festlegen von Stilen und Beschriftungen) und Stevi (Hinzufügen von Speicherplatz) habe ich meine Funktionsversion erstellt, die Pandas-Datenrahmen als Tabellen nebeneinander ausgibt:
Verwendung:
Ausgabe:
quelle
Hier ist die Lösung von Jake Vanderplas, auf die ich neulich gestoßen bin:
Bildnachweis: https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/03.08-Aggregation-and-Grouping.ipynb
quelle
Meine Lösung erstellt einfach eine Tabelle in HTML ohne CSS-Hacks und gibt sie aus:
quelle
Dies fügt der Antwort von @ nts Header hinzu:
quelle
mydisplay((df1,df2))
gibt nurdf.to_html(index=False) df.to_html(index=False)
anstelle des Datenrahmeninhalts. Außerdem gibt es ein zusätzliches '}' Zeichen bei f'string '.Am Ende habe ich HBOX verwendet
quelle
Gibbones Antwort hat bei mir funktioniert! Wenn Sie zusätzlichen Platz zwischen den Tabellen wünschen, gehen Sie zu dem von ihm vorgeschlagenen Code und fügen Sie diesen
"\xa0\xa0\xa0"
der folgenden Codezeile hinzu.quelle
Ich beschloss, Yasins elegante Antwort um einige zusätzliche Funktionen zu erweitern, bei denen man sowohl die Anzahl der Spalten als auch die Zeilen auswählen kann . Alle zusätzlichen dfs werden dann unten hinzugefügt. Zusätzlich kann man wählen, in welcher Reihenfolge das Raster gefüllt werden soll (ändern Sie einfach das Füllschlüsselwort in "Spalten" oder "Zeilen", je nach Bedarf).
Testausgabe
quelle
Erweiterung der Antwort von antony Wenn Sie die Visualisierung von Tabellen auf eine bestimmte Anzahl von Blöcken pro Zeile beschränken möchten, verwenden Sie die Variable maxTables.
quelle