web-dev-qa-db-fra.com

Afficher DataFrame sous forme de table dans iPython Notebook

J'utilise un ordinateur portable iPython. Quand je fais ça:

df

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

df1
df2 

ça n'imprime pas la première belle table. Si j'essaye ceci:

print df1
print df2

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

Y a-t-il un moyen de le forcer à imprimer les beaux tableaux pour les deux jeux de données?

196
Chris

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 vous contentez de print df1.to_html(), vous obtiendrez le code HTML brut et non rendu.

Vous pouvez également importer de IPython.core.display avec le même effet

312
emunsing
from IPython.display import display
display(df)  # OR
print df.to_html()
43
JacobWuzHere

Cette réponse est basée sur le deuxième conseil de cet article de blog: 28 conseils, astuces et raccourcis pour le bloc-notes Jupyter Notebook

Vous pouvez ajouter le code suivant en haut de votre cahier

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

Ceci demande à Jupyter d’imprimer les résultats de toute variable ou instruction sur sa propre ligne. Vous pouvez alors exécuter une cellule contenant uniquement

df1
df2

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

35
Jonny Brooks

Je préfère ne pas jouer avec le langage HTML et utiliser le plus 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 génère:

enter image description here

7
Shital Shah

Il semble que vous pouvez simplement afficher les deux dfs en utilisant une virgule entre les deux. 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")

4
Moondra