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?
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
from IPython.display import display
display(df) # OR
print df.to_html()
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".
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:
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")