The best answers to the question “Show DataFrame as table in iPython Notebook” in the category Dev.
I am using iPython notebook. When I do this:
I get a beautiful table with cells. However, if i do this:
it doesn’t print the first beautiful table. If I try this:
print df1 print df2
It prints out the table in a different format that spills columns over and makes the output very tall.
Is there a way to force it to print out the beautiful tables for both datasets?
from IPython.display import display display(df) # OR print df.to_html()
You’ll need to use the
display() functions from IPython’s display module:
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()))
Note that if you just
print df1.to_html() you’ll get the raw, unrendered HTML.
You can also import from
IPython.core.display with the same effect
I prefer not messing with HTML and use as much as native infrastructure as possible. You can use Output widget with Hbox or 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
This answer is based on the 2nd tip from this blog post: 28 Jupyter Notebook tips, tricks and shortcuts
You can add the following code to the top of your notebook
from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"
This tells Jupyter to print the results for any variable or statement on it’s own line. So you can then execute a cell solely containing
and it will “print out the beautiful tables for both datasets”.