Pokaż DataFrame jako tabelę w iPython Notebook

245

Używam notatnika iPython. Kiedy to zrobię:

df

Dostaję piękny stół z komórkami. Jeśli jednak to zrobię:

df1
df2 

nie drukuje pierwszego pięknego stołu. Jeśli spróbuję:

print df1
print df2

Drukuje tabelę w innym formacie, który rozlewa kolumny i sprawia, że ​​wydruk jest bardzo wysoki.

Czy istnieje sposób, aby zmusić go do wydrukowania pięknych tabel dla obu zestawów danych?

Chris
źródło
15
display(df)(with from IPython.display import display), lubprint df.to_html()
joris
3
@ joris, twój komentarz wydaje się odpowiadać na pytanie, więc czy mógłbyś opublikować go jako odpowiedź, aby pytanie nie pozostało bez odpowiedzi?
Cristian Ciupitu

Odpowiedzi:

384

Musisz użyć funkcji HTML()lub display()z modułu wyświetlacza 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()))

Pamiętaj, że jeśli tylko print df1.to_html()dostaniesz, otrzymasz nieprzetworzony HTML.

Możesz również importować IPython.core.displayz tym samym efektem

emuning
źródło
3
Czy można poprosić Pythona o automatyczne otwieranie przeglądarki i wyświetlanie HTML(df2.to_html())?
Cina
@Cina Powinieneś być w stanie napisać HTML do pliku, a następnie wywołać ulubioną przeglądarkę tego pliku, ale to, jak to zrobić, zależy w dużej mierze od systemu, w którym jesteś, przeglądarki itp.
nealmcb
2
HTML (df2.to_html ()) nic nie robi. Powinieneś zrobić display (HTML (df2.to_html ())), aby wyrenderować ramkę danych. Próbowałem edytować twoją odpowiedź, ale jakoś została odrzucona.
alyaxey
8
w wersji 5.6.0 nie musiszimport display
joelb
Jak radzić sobie z połączonymi łańcuchami? Na przykład, aby uzyskać cały tekst z kolumn tekstowych.
Peter.k
51
from IPython.display import display
display(df)  # OR
print df.to_html()
JacobWuzHere
źródło
5
Jak stwierdził @emunsing, .to_html () nie działa, daje nieprzesłaną tabelę HTML.
majank
44

Ta odpowiedź oparta jest na drugiej wskazówce z tego postu na blogu: 28 porad, sztuczek i skrótów do notesu Jupyter

Możesz dodać następujący kod na górze notebooka

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

To mówi Jupyterowi, aby wydrukował wyniki dla dowolnej zmiennej lub instrukcji we własnej linii. Możesz więc wykonać komórkę zawierającą wyłącznie

df1
df2

i „wydrukuje piękne tabele dla obu zestawów danych”.

Jonny Brooks
źródło
3
To rozwiązanie działa pięknie i rozwiązuje pierwotny problem. Dzięki!
Zertrin,
16

Wolę nie zadzierać z HTML-em i wykorzystywać tyle infrastruktury natywnej, ile to możliwe. Możesz użyć widgetu Output z Hbox lub 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

To daje:

wprowadź opis zdjęcia tutaj

Shital Shah
źródło
5

Wygląda na to, że możesz po prostu wyświetlić oba dfs za pomocą przecinka na wyświetlaczu. Zauważyłem to w niektórych notatnikach na github. Ten kod pochodzi z notatnika 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")

Moondra
źródło
1

Aby wyświetlić ramkę danych w Notatniku Jupyter, po prostu wpisz:

   display (nazwa_ramki_danych)

na przykład:

  wyświetlacz (df)
Hossein SLT
źródło
0

Aby wyświetlić ramki danych zawarte na liście:

display(*dfs)
BSalita
źródło