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?


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


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()

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".


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


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")


1

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

   affichage (Name_of_the_DataFrame)

par exemple:

  affichage (df)

0

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

display(*dfs)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.