Chris
Chris

Reputation: 13680

Show DataFrame as table in iPython Notebook

I am using iPython notebook. When I do this:

df

I get a beautiful table with cells. However, if i do this:

df1
df2 

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?

Upvotes: 370

Views: 497231

Answers (10)

Ultra
Ultra

Reputation: 101

using spark 3.5.4 the following displays a table in pretty print. df is a spark data frame.

import pandas as pd

df.toPandas()

Upvotes: 0

Muhammad Yasirroni
Muhammad Yasirroni

Reputation: 2167

From my other answer,

if you want to using option, you can use context manager combining the display:

from IPython.display import display

with pd.option_context('precision', 3):
    display(df1)
    display(df2)

Upvotes: 3

You can use markdown to create a table. You'll be asked to install tabulate package first if it is not yet available.

from IPython.display import display, Markdown

display(Markdown(df.to_markdown()))

Upvotes: 5

BSalita
BSalita

Reputation: 8961

To display dataframes contained in a list:

dfs = [df1, df2]
display(*dfs)

Upvotes: 4

Hossein SLT
Hossein SLT

Reputation: 171

In order to show the DataFrame in Jupyter Notebook just type:

   display(Name_of_the_DataFrame)

for example:

  display(df)

Upvotes: 17

Shital Shah
Shital Shah

Reputation: 68908

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 outputs:

enter image description here

Upvotes: 20

JacobWuzHere
JacobWuzHere

Reputation: 913

from IPython.display import display
display(df)  # OR
print df.to_html()

Upvotes: 70

emunsing
emunsing

Reputation: 9954

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

Upvotes: 571

Moondra
Moondra

Reputation: 4531

It seems you can just display both dfs using a comma in between in display. I noticed this on some notebooks on github. This code is from Jake VanderPlas's notebook.

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

Upvotes: 5

Jonny Brooks
Jonny Brooks

Reputation: 3308

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

df1
df2

and it will "print out the beautiful tables for both datasets".

Upvotes: 52

Related Questions