1. Overview
In this short tutorial, we are going to add gradient color visualization for dates in Pandas DataFrame.
This is helpful when you need to distinguish dates based on their values.
2. Setup
We will use simple DataFrame:
import numpy as np
import pandas as pd
from pandas.util.testing import makeTimeSeries
s = makeTimeSeries(5)
cols = ['col_1', 'col_2']
df = pd.DataFrame(abs(np.random.randn(5, 2)), columns=cols)
df['date'] = s.index
data:
col_1 | col_2 | date | |
---|---|---|---|
0 | 0.182079 | 0.203433 | 2000-01-03 |
1 | 0.037811 | 0.096004 | 2000-01-04 |
2 | 0.479913 | 0.802299 | 2000-01-05 |
3 | 1.881718 | 1.605743 | 2000-01-06 |
4 | 0.319824 | 0.912157 | 2000-01-07 |
3. Steps to Add gradient to Date Column in Pandas
3.1. Add new column days since
We will start by adding a new column which will have the difference between some date or today and the dates in the column:
from datetime import datetime
df['days since'] = (df['date'] - datetime.today()).dt.days
DataFrame will looks like:
col_1 | col_2 | date | days since | |
---|---|---|---|---|
0 | 0.754816 | 0.107682 | 2000-01-03 00:00:00 | -8069 |
1 | 0.656553 | 0.042157 | 2000-01-04 00:00:00 | -8068 |
2 | 0.953792 | 1.593115 | 2000-01-05 00:00:00 | -8067 |
3 | 0.671552 | 1.810286 | 2000-01-06 00:00:00 | -8066 |
4 | 0.159057 | 0.548218 | 2000-01-07 00:00:00 | -8065 |
3.2. Add gradient color to days column as a Styler
Then we are going to use method background_gradient
to add gradient color to the whole DataFrame:
style1 = df.style.background_gradient(cmap='Greens')
3.3. Create new DataFrame and reuse the style
Next we are going do the following steps:
- copy the first DataFrame as
df2
- create new Styler
- hide column 'date'
- change column 'days since' to 'date' column
- reuse the first Styler
style1 = df.style.background_gradient(cmap='Greens')
df2 = df
style2 = df2.style.hide(['date'], axis='columns')
df2['days since'] = df2['date']
style2.use(style1.export())
Dates after this step will be shown as: 2000-01-03 00:00:00З
3.4. Change date format in the Pandas style object
Finally we are going to change the date format in order to make ir more readable by adding .format({"days since": lambda t: t.strftime("%m/%d/%Y")})
The dates now will be displayed as: 01/03/2000
We can use any format thanks to strftime
4. Add gradient to Date Column in Pandas - Full code
Finally we can see the full code and the final result below:
style1 = df.style.background_gradient(cmap='Greens')
df2 = df
style2 = df2.style.hide(['date'], axis='columns')
df2['days since'] = df2['date']
style2.use(style1.export()).format({"days since": lambda t: t.strftime("%m/%d/%Y")})
result:
col_1 | col_2 | days since | |
---|---|---|---|
0 | 0.754816 | 0.107682 | 01/03/2000 |
1 | 0.656553 | 0.042157 | 01/04/2000 |
2 | 0.953792 | 1.593115 | 01/05/2000 |
3 | 0.671552 | 1.810286 | 01/06/2000 |
4 | 0.159057 | 0.548218 | 01/07/2000 |
5. Conclusion
We saw how to add gradient color for dates. We cover all the steps with detailed explanation.
We also learned how to copy styles between two DataFrames and how to change the format of dates.