Afficher DataFrame sous forme de tableau dans le bloc-notes iPython

245

J'utilise le bloc-notes iPython. Quand je fais ça:

df

Je reçois une belle table avec des cellules. Cependant, si je fais cela:

df1
df2 

il n'imprime pas le premier beau tableau. Si j'essaye ceci:

print df1
print df2

Il imprime le tableau dans un format différent qui déborde les colonnes et rend la sortie très haute.

Existe-t-il un moyen de le forcer à imprimer les belles tables pour les deux jeux de données?

Chris
la source
15
display(df)(avec from IPython.display import display), ouprint df.to_html()
joris
3
@joris, votre commentaire semble répondre à la question, alors pourriez-vous peut-être le poster comme réponse, afin que la question ne reste pas sans réponse?
Cristian Ciupitu

Réponses:

384

Vous devrez utiliser les fonctions HTML()ou display()du module d'affichage d'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()))

Notez que si vous venez, print df1.to_html()vous obtiendrez le HTML brut et non rendu.

Vous pouvez également importer depuis IPython.core.displayavec le même effet

démunir
la source
3
Est-il possible de demander à python d'ouvrir automatiquement le navigateur et de l'afficher HTML(df2.to_html())?
Cina
@Cina Vous devriez pouvoir écrire le code HTML dans un fichier, puis appeler votre navigateur préféré sur ce fichier, mais comment le faire dépend beaucoup du système sur lequel vous vous trouvez, du navigateur, etc.
nealmcb
2
HTML (df2.to_html ()) ne fait rien. Vous devez afficher (HTML (df2.to_html ())) pour rendre le cadre de données. J'ai essayé de modifier votre réponse, mais elle a été rejetée.
alyaxey
8
sur la version 5.6.0, vous n'en avez pas besoinimport display
joelb
Comment gérer les chaînes concaténées? Par exemple pour obtenir tout le texte des colonnes de texte.
Peter.k
51
from IPython.display import display
display(df)  # OR
print df.to_html()
JacobWuzHere
la source
5
Comme indiqué par @emunsing, .to_html () ne fonctionne pas, il donne une table html non rendue.
Mayank
44

Cette réponse est basée sur la 2ème astuce de ce billet de blog: 28 astuces, astuces et raccourcis Jupyter Notebook

Vous pouvez ajouter le code suivant en haut de votre bloc-notes

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

Cela indique à Jupyter d'imprimer les résultats de toute variable ou instruction sur sa propre ligne. Vous pouvez donc exécuter une cellule contenant uniquement

df1
df2

et il "imprimera les belles tables pour les deux jeux de données".

Jonny Brooks
la source
3
Cette solution fonctionne à merveille et résout le problème d'origine posé. Merci!
Zertrin
16

Je préfère ne pas jouer avec HTML et utiliser autant que possible l'infrastructure native. Vous pouvez utiliser le widget de sortie avec Hbox ou 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

Cela produit:

entrez la description de l'image ici

Shital Shah
la source
5

Il semble que vous puissiez simplement afficher les deux dfs en utilisant une virgule entre les deux dans l'affichage. J'ai remarqué cela sur certains cahiers sur github. Ce code provient du cahier de 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
la source
1

Afin d'afficher le DataFrame dans Jupyter Notebook, tapez simplement:

   affichage (Name_of_the_DataFrame)

par exemple:

  affichage (df)
Hossein SLT
la source
0

Pour afficher les cadres de données contenus dans une liste:

display(*dfs)
BSalita
la source