首页 > 解决方案 > 用户从python的下拉列表中选择值后如何显示过滤后的数据框和streamlit?

问题描述

如何在用户从streamlit中的选择框中选择值后显示过滤后的数据框,每次用户更改值时,页面都会刷新并显示整个数据框。

我想要的是显示过滤后的数据框。

我试图初始化一个空数据框,但是一旦页面刷新它就会显示以下错误:

IndexError: list index out of range
Traceback:
File "F:\AIenv\lib\site-packages\streamlit\script_runner.py", line 349, in _run_script
    exec(code, module.__dict__)
File "f:\AIenv\streamlit\app.py", line 553, in <module>
    main()
File "f:\AIenv\streamlit\app.py", line 543, in main
    st.session_state["df_result_search"].columns.tolist()[0]

代码:

import streamlit as st
import pandas as pd

def update_df(new_df):
    return pd.DataFrame(new_df)
 
def main():
    # df_result_search = pd.DataFrame()
    
    # st.session_state.df_result_search = df_result_search
    df =pd.DataFrame({
                    "source_number":                       
                    [11199,11328,11287,32345,12342,1232,13456,123244,13456],
                    "location":          
                    ["loc2","loc1-loc3","loc3","loc1","loc2-loc1","loc2","loc3-loc2","loc2","loc1"],
                    "category": 
                    ["cat1","cat2","cat1","cat3","cat3","cat3","cat2","cat3","cat2"],
        })
    df_result_search = df    
    st.write(st.session_state)
    with st.form(key='Search_form'):
        all_columns = df.columns.tolist()
        search_term=st.text_input("Enter Search Term")
        if 'search_term' not in st.session_state:
            st.session_state.search_term = search_term

        if st.form_submit_button("search"):
            # if len(search_term)>0:
            df_result_search = df[df.isin([search_term]).any(axis=1)]

        st.session_state.search_term = search_term
        
        if 'df_result_search' not in st.session_state:
            st.write("Session Out")
        else:
            st.write("Session IN")
        st.session_state.df_result_search = df_result_search
        st.dataframe(st.session_state["df_result_search"])

    df_len = range(len(df_result_search.index))
    index = df_result_search.columns.tolist().index(
        st.session_state["df_result_search"].columns.tolist()[0]
        )
    st.write("index :{}".format(index))    

    df_len = range(len(df_result_search.index))
    s = st.selectbox('Select index',key="select_box",options=df_len,index = index,on_change=lambda: update_df(df_result_search))
    print(st.session_state.select_box)
    st.write("values is {}".format(st.session_state.select_box))

if __name__ == '__main__':
    main()

标签: pythonpandasdataframe

解决方案


推荐阅读