Show DataFrame as table in iPython Notebook

368,361

Solution 1

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

Solution 2

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

Solution 3

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

Solution 4

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

Solution 5

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

   display(Name_of_the_DataFrame)

for example:

  display(df)
Share:
368,361

Related videos on Youtube

Chris
Author by

Chris

Updated on September 06, 2021

Comments

  • Chris
    Chris over 2 years

    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?

    • joris
      joris over 9 years
      display(df) (with from IPython.display import display), or print df.to_html()
    • Cristian Ciupitu
      Cristian Ciupitu over 9 years
      @joris, your comment seems to answer the question, so could you perhaps post it as an answer, so that the question doesn't remain unanswered?
  • mayank
    mayank almost 9 years
    As stated by @emunsing, .to_html() doesn't work, it gives unrendered html table.
  • Cina
    Cina almost 8 years
    Is it possible to ask python to automatically open browser and show HTML(df2.to_html()) ?
  • Zertrin
    Zertrin about 7 years
    This solution works beautifully and solves the original problem asked. Thanks!
  • nealmcb
    nealmcb over 6 years
    @Cina You should be able to write the HTML to a file, and then call your favorite browser on that file, but how to do so depends a lot on the system you're on, the browser, etc.
  • alyaxey
    alyaxey over 6 years
    HTML(df2.to_html()) does nothing. You should do display(HTML(df2.to_html())) to render the dataframe. I tried to edit your answer but somehow it was rejected.
  • joel
    joel almost 6 years
    on version 5.6.0 you don't need to import display
  • Peter.k
    Peter.k over 5 years
    How to deal with concatenated strings? For example to get all text from text columns.
  • Rishabh Gupta
    Rishabh Gupta over 3 years
    Do you also know how to hide the index numbers, not for all dfs but for only the ones that I want to?
  • Ion Sme
    Ion Sme about 3 years
    is there a way to suppress output though, if you don't want everything showing? Like ideally, putting a semicolon at the end would prevent a print.
  • Jonny Brooks
    Jonny Brooks about 3 years
    @IonSme If you put a semicolon at the end of the last line then I think it suppresses all output, otherwise I don't think it suppresses any output. If you want to suppress output of a variable then you just don't put the variable on its own line. What scenarios would you want to suppress output of some variables but still have them on their own line?
  • Kim
    Kim about 3 years
    This displays the column/header names only, which is not what the OP asked for. Instead, they wanted the whole DataFrame to be printed in a nice format. So display(df) or display(HTML(df2.to_html())) for wider dataframes is the correct and accepted answer.
  • BSalita
    BSalita about 3 years
    @Kim Please reread my answer. If you still don't believe it, verify it with code. I stand by my answer.
  • Kim
    Kim about 3 years
    apologies for the confusion. I did overlook the "contained in a list" part of your answer. So you are right, your example works with dfs being a list of dataframes. I suggest to update your code example accordingly, to make this stand out in the code as well. Especially since this is the extra value you bring to the discussion. I am more than happy to change my vote then.
  • BSalita
    BSalita about 3 years
    It is common to not fully read answers. I've done that myself. Maybe as many as 40% of comments are misunderstandings.
  • user2478236
    user2478236 over 2 years
    Audio objects dose not render it prints <IPython.lib.display.Audio object>
  • jxmorris12
    jxmorris12 about 2 years
    This approach almost never works right for me. HTML(df.to_html()) properly escapes characters, markdown doesn't.