When I want to change something I usually just change the style via CSS, but I can’t find the correct data-testid nor the parameter to change the color of the headers and borders of a dataframe, I’m nowhere near a front-end developer, maybe that is part of the issue lol.
Is this possible to do in streamlit?
Hey @renanklehm
Here’s an example with Pandas Styler:
import streamlit as st
import pandas as pd
df = pd.DataFrame({
'Column 1': [1, 2, 3],
'Column 2': [4, 5, 6]
})
def style_dataframe(df):
return df.style.set_table_styles(
[{
'selector': 'th',
'props': [
('background-color', '#4CAF50'),
('color', 'white'),
('font-family', 'Arial, sans-serif'),
('font-size', '16px')
]
},
{
'selector': 'td, th',
'props': [
('border', '2px solid #4CAF50')
]
}]
)
styled_df = style_dataframe(df)
st.write(styled_df.to_html(), unsafe_allow_html=True)
Would that work for you?
Best,
Charly
Thanks!
I assume that there is no way of setting a “default” style to all tables, right?
Also, Is there a way of using a similar approach with data_editor()?
1 Like
Well, you could streamline the process by defining a utility function for styling and then applying it to any DataFrame you want to display!
Let me know if you’d need any help on this.
Charly
Not with data_editor()
afaik, but then there’s always the streamlit-aggrid option.
Best,
Charly
Here’s how @renanklehm:
import streamlit as st
import pandas as pd
df1 = pd.DataFrame({
'Column 1': [1, 2, 3],
'Column 2': [4, 5, 6]
})
df2 = pd.DataFrame({
'Column A': ['A', 'B', 'C'],
'Column B': ['D', 'E', 'F']
})
def style_dataframe(df):
return df.style.set_table_styles(
[{
'selector': 'th',
'props': [
('background-color', '#4CAF50'),
('color', 'white'),
('font-family', 'Arial, sans-serif'),
('font-size', '16px')
]
},
{
'selector': 'td, th',
'props': [
('border', '2px solid #4CAF50')
]
}]
)
def display_dataframe(df):
styled_df = style_dataframe(df)
st.write(styled_df.to_html(), unsafe_allow_html=True)
# Display DataFrames
st.header("DataFrame 1")
display_dataframe(df1)
st.header("DataFrame 2")
display_dataframe(df2)
I hope that helps.
Charly
1 Like
can you do that but row level depending on value? or column?