Show DataFrame as table in iPython Notebook – Dev

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 HTML() or 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:"
print "Dataframe 2:"

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:
with widget2:

# create HBox
hbox = widgets.HBox([widget1, widget2])

# render hbox

This outputs:

enter image description here


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