Search code examples
pythonpandasdataframestreamlit

How do round decimals when writing dataframe in streamlit


import streamlit as st
import pandas as pd


data = {'Days': ["Sunday", "Wednesday", "Friday"],
        'Predictions': [433.11, 97.9, 153.65]}
df = pd.DataFrame(data)
st.write(df)

streamlit writes dataframe with four decimals by default, but i expected two decimals. With print() it produces the expected, and when st.write() is used it produces the below output:


    Days     | Predictions
-------------|-------------
0   Sunday   |  433.1100  |
1   Wednesday|  97.9000   |
2   Friday   |  153.6500  |

I tried:

df.round(2)

but it didn't help.

Desired output format:

    Days     | Predictions
-------------|-------------
0   Sunday   |  433.11    |
1   Wednesday|  97.90     |
2   Friday   |  153.65    |

Solution

  • With the df.style.format() method, you can specify the desired number of decimal places to override the default behavior of pandas in streamlit.
    Note: This approach only provides the desired output format but when working farther you will have to still use the original dataframe which is df.

    formatted_df = df.style.format({"Predictions": "{:.2f}".format})
    st.write(formatted_df)
    

    You could also choose to write the dataframe without having to initialize a variable, like so:

    st.write(df.style.format({"Predictions": "{:.2f}"}))