I created this simple python example below. I used streamlit
together with pandas
. This example has an editable dataframe in each selectbox "A" and "B". When I hit the selectbox "A", and edit the table: for example, add a new row as "a4" and "4" as value, then hit the selectbox "B" and come back to selectbox "A", the df1 goes back to original dataframe because the whole funct1 is rerun from the start. How can the edited dataframe information be stored so the edited dataframe infromation wouldn t be lost? I don t want to @st.cache_data
it as I want the dataframe to be editable continuously.
import streamlit as st
import pandas as pd
page = st.sidebar.selectbox("Select: ", ("A","B"))
### Added code - but this doesn t work:
st.session_state[ page ] = page
selected_app_mode = st.session_state.get( page )
app_mode_ix = 0
if selected_app_mode:
app_mode_ix = page.index(selected_app_mode)
page = st.sidebar.selectbox(page, index=app_mode_ix)
st.session_state[ page ] = page
### End of added code
def funct1():
df1 = pd.DataFrame({"col1": ["a1", "a2", "a3"],
"Values": [1, 2, 3]})
edited_df1 = st.experimental_data_editor(df1, num_rows="dynamic")
return df1
def funct2():
df2 = pd.DataFrame({"col1": ["b1", "b2", "b3"],
"Values": [1, 2, 3]})
edited_df1 = st.experimental_data_editor(df2, num_rows="dynamic")
return df2
if page == "A":
funct1()
elif page == "B":
funct2()
What I got (if I remove the added code):
df1
a1 1
a2 2
a3 3
Expected to get:
df1
a1 1
a2 2
a3 3
a4 4