I am building report in HTML format using pd.to_html() method. Can anyone clarify how can i format cells with values between -0.5 and 0.5 with green back ground for particular columns of data frame?
-
What have you tried so far, have you got any samples of the code not working we can help you with?theatlasroom– theatlasroom2016-06-05 05:18:02 +00:00Commented Jun 5, 2016 at 5:18
-
Unfortunately even cant find any example to tryFelix– Felix2016-06-05 05:19:06 +00:00Commented Jun 5, 2016 at 5:19
-
Have you had a look at this question? it might be some help.theatlasroom– theatlasroom2016-06-05 05:20:57 +00:00Commented Jun 5, 2016 at 5:20
Add a comment
|
1 Answer
You can do custom formatting of DataFrames using the style attribute (introduced starting from pandas v0.17.1).
An example to do what you want:
df = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'))
def highlight_vals(val, min=-0.5, max=0.5, color='green'):
if min < val < max:
return 'background-color: %s' % color
else:
return ''
df.style.applymap(highlight_vals, subset=['B', 'C', 'D'])
gives you
See this notebook for the full example: http://nbviewer.jupyter.org/gist/jorisvandenbossche/8b74f71734cd6d75a58c5a048261a7a7
And see the docs for more example how to format the dataframe: http://pandas.pydata.org/pandas-docs/stable/style.html
To write the output to a file, you can do:
with open('filename.html', 'w') as f:
f.write(df.style.applymap(highlight_vals, subset=['B', 'C', 'D'])
.set_table_attributes("border=1").render())
6 Comments
Felix
Thank you, this is exactly what i looked. Will try
Felix
How can i add the path for HTML output? Want to print file in specific location. None of the examples doesn't show that. Thank you
joris
@Felix you will have to write the string that
render returns to a file yourself. I added an example how to do this.Felix
Thank you, @joris. For some reason in saved html page coloring working fine but borders from table disappeared. Any thoughts on that?
joris
You're correct. For some reason, the style template does not include
border=1 in the table tag. You can add this with .set_table_attributes("border=1"). I updated the answer. |
