我正在开发一个 Streamlit 应用程序,在其中使用 st.dataframe 显示 DataFrame。我想更改标题行的颜色(例如,将“市场”、“Metro Quota”和“Metro BTS”标题设为不同的颜色)。但是,我一直无法找到直接在 Streamlit 中应用这些样式的方法。
我尝试使用pandas Styler应用样式,但是当DataFrame在Streamlit中显示时,颜色不显示。这是我的代码的简化版本和当前 DataFrame 显示的屏幕截图:
我请求更改标题行的颜色。
注意:DataFrame 是多个 Excel 文件的组合,并转换为单个“filtered_df”数据框,如图所示,该数据框显示在 Streamlit Web 应用程序上。
这里是可能对您有帮助的代码:
# Initialize filtered dataframe
filtered_df = result_df
float_cols = filtered_df.select_dtypes(include=['float']).columns
filtered_df[float_cols] = filtered_df[float_cols].fillna(0)
filtered_df[float_cols] = filtered_df[float_cols].apply(lambda col: col.round().astype(int))
# Display the dataframe with filtering logic
with st.expander("Dataframe", expanded=True):
if selected_market == "All":
filtered_df.style
st.data_editor(filtered_df, height=350, use_container_width=True, hide_index=True)
else:
filtered_df = filtered_df[(filtered_df['Market'] == selected_market) | (filtered_df['Market'] == selected_market + " Total")]
st.data_editor(filtered_df, use_container_width=True, hide_index=True)
# Add a button to save the filtered DataFrame as a CSV file
if st.button('Save Finalized Data'):
# Save the filtered dataframe (either whole or filtered by the selected market)
filtered_df.to_excel('finalized_goals.xlsx', index=False)
st.success('Filtered data has been saved successfully!')
st.dataframe
和 st.data_editor
不允许这样的样式。
解决方法是使用 pandas styler,转换为 html,然后用
st.write
显示 html 内容。
如果您需要可编辑的数据框,我认为没有完美的解决方案。我知道您问过
st.dataframe
但您的示例正在使用 st.data_editor
)
这是一个例子:
import pandas as pd
import streamlit as st
df = pd.DataFrame(
data={
"Market": ["Alabama", "Alabama"],
"Store": ["15TH ST", "DEMOPOLIS"],
"Metro Quota": [187, 81],
"Metro BTS": [58, 35],
}
)
styled_df = df.style.set_table_styles(
[
{"selector": "th:nth-child(2)", "props": [("background-color", "yellow")]},
{"selector": "th:nth-child(4)", "props": [("background-color", "pink")]},
{"selector": "th:nth-child(5)", "props": [("background-color", "orange")]},
]
)
st.write(styled_df.to_html(), unsafe_allow_html=True)