Skip to content

Instantly share code, notes, and snippets.

@francisco-perez-sorrosal
Last active August 10, 2022 19:20
Show Gist options
  • Save francisco-perez-sorrosal/b216a89313ba947c2edd07a50e0708c7 to your computer and use it in GitHub Desktop.
Save francisco-perez-sorrosal/b216a89313ba947c2edd07a50e0708c7 to your computer and use it in GitHub Desktop.
Paged Dataframe in Streamlit
import streamlit as st
class PagedDataframe:
def __init__(self, key, df, page_entries=10):
self.key = f"{key}_page"
self.df = df
self.page_entries = page_entries
self.last_page = len(df) // page_entries
if self.key not in st.session_state:
st.session_state[self.key] = 0
def show(self):
# Get start and end indices of the next page of the dataframe
start_idx = st.session_state[self.key] * self.page_entries
end_idx = (1 + st.session_state[self.key]) * self.page_entries
st.write(f"DF Entries: {len(self.df)}")
st.dataframe(self.df.iloc[start_idx:end_idx])
def next(self):
st.session_state[self.key] = (
0 if st.session_state[self.key] + 1 > self.last_page else st.session_state[self.key] + 1
)
self.show()
def prev(self):
st.session_state[self.key] = (
self.last_page if st.session_state[self.key] - 1 < 0 else st.session_state[self.key] - 1
)
self.show()
df = pd.DataFrame...
st.subheader("Raw data")
prev, center, next = st.columns([1, 20, 1])
pd = PagedDataframe("infer_data", df)
next.button("Next", on_click=pd.next)
prev.button("Prev", on_click=pd.prev)
with center.container():
pd.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment