Show DataFrame as table in iPython Notebook
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:
Solution 5
In order to show the DataFrame in Jupyter Notebook just type:
display(Name_of_the_DataFrame)
for example:
display(df)
Related videos on Youtube
Chris
Updated on September 06, 2021Comments
-
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 over 9 years
display(df)
(withfrom IPython.display import display
), orprint df.to_html()
-
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 almost 9 yearsAs stated by @emunsing, .to_html() doesn't work, it gives unrendered html table.
-
Cina almost 8 yearsIs it possible to ask python to automatically open browser and show
HTML(df2.to_html())
? -
Zertrin about 7 yearsThis solution works beautifully and solves the original problem asked. Thanks!
-
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 over 6 yearsHTML(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 almost 6 yearson version 5.6.0 you don't need to
import display
-
Peter.k over 5 yearsHow to deal with concatenated strings? For example to get all text from text columns.
-
Rishabh Gupta over 3 yearsDo you also know how to hide the index numbers, not for all dfs but for only the ones that I want to?
-
Ion Sme about 3 yearsis 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 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 about 3 yearsThis 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)
ordisplay(HTML(df2.to_html()))
for wider dataframes is the correct and accepted answer. -
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 about 3 yearsapologies 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 about 3 yearsIt is common to not fully read answers. I've done that myself. Maybe as many as 40% of comments are misunderstandings.
-
user2478236 over 2 yearsAudio objects dose not render it prints <IPython.lib.display.Audio object>
-
jxmorris12 about 2 yearsThis approach almost never works right for me.
HTML(df.to_html())
properly escapes characters, markdown doesn't.