如何更改 Streamlit DataFrame 显示中的标题颜色?

问题描述 投票:0回答:1

我正在开发一个 Streamlit 应用程序,在其中使用 st.dataframe 显示 DataFrame。我想更改标题行的颜色(例如,将“市场”、“Metro Quota”和“Metro BTS”标题设为不同的颜色)。但是,我一直无法找到直接在 Streamlit 中应用这些样式的方法。

我尝试使用pandas Styler应用样式,但是当DataFrame在Streamlit中显示时,颜色不显示。这是我的代码的简化版本和当前 DataFrame 显示的屏幕截图:

Picture of dataframe displayed on streamlit web app

我请求更改标题行的颜色。

注意: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!')
python pandas dashboard streamlit
1个回答
0
投票

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)

Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.