Mostra DataFrame come tabella nel Notebook iPython


245

Sto usando il notebook iPython. Quando faccio questo:

df

Ottengo un bellissimo tavolo con celle. Tuttavia, se lo faccio:

df1
df2 

non stampa il primo bellissimo tavolo. Se provo questo:

print df1
print df2

Stampa la tabella in un formato diverso che rovescia le colonne e rende l'output molto alto.

C'è un modo per costringerlo a stampare le bellissime tabelle per entrambi i set di dati?


15
display(df)(con from IPython.display import display), oppureprint df.to_html()
joris,

3
@ maggioris, il tuo commento sembra rispondere alla domanda, quindi potresti forse pubblicarlo come risposta, in modo che la domanda non rimanga senza risposta?
Cristian Ciupitu,

Risposte:


384

Dovrai utilizzare le funzioni HTML()o display()dal modulo display di 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()))

Si noti che se si print df1.to_html()ottiene solo l'HTML grezzo, senza rendering.

Puoi anche importare da IPython.core.displaycon lo stesso effetto


3
È possibile chiedere a Python di aprire automaticamente il browser e mostrare HTML(df2.to_html()) ?
Cina,

@Cina Dovresti essere in grado di scrivere l'HTML in un file e quindi chiamare il tuo browser preferito su quel file, ma il modo in cui farlo dipende molto dal sistema in cui ti trovi, dal browser, ecc.
nealmcb

2
HTML (df2.to_html ()) non fa nulla. Dovresti fare display (HTML (df2.to_html ())) per renderizzare il frame di dati. Ho provato a modificare la tua risposta ma in qualche modo è stata respinta.
alyaxey,

8
sulla versione 5.6.0 non è necessarioimport display
joelb

Come gestire le stringhe concatenate? Ad esempio per ottenere tutto il testo dalle colonne di testo.
Peter.k,

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

5
Come affermato da @emunsing, .to_html () non funziona, fornisce una tabella html senza rendering.
Mayank

44

Questa risposta si basa sul secondo suggerimento di questo post del blog: 28 consigli, trucchi e scorciatoie per Jupyter Notebook

È possibile aggiungere il seguente codice nella parte superiore del notebook

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

Questo dice a Jupyter di stampare i risultati per qualsiasi variabile o istruzione sulla propria riga. Quindi puoi eseguire una cella contenente solo

df1
df2

e "stamperà le splendide tabelle per entrambi i set di dati".


3
Questa soluzione funziona magnificamente e risolve il problema originale richiesto. Grazie!
Zertrin

16

Preferisco non scherzare con HTML e usare il più possibile l'infrastruttura nativa. È possibile utilizzare il widget Output con Hbox o 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

Questo produce:

inserisci qui la descrizione dell'immagine


5

Sembra che tu possa visualizzare entrambi i dfs usando una virgola in mezzo a display. Ho notato questo su alcuni notebook su Github. Questo codice proviene dal taccuino di 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

Per mostrare il DataFrame in Jupyter Notebook basta digitare:

   visualizzazione (Name_of_the_DataFrame)

per esempio:

  visualizzazione (df)

0

Per visualizzare i frame di dati contenuti in un elenco:

display(*dfs)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.