import streamlit as st import pandas as pd ################################### from st_aggrid import AgGrid from st_aggrid.grid_options_builder import GridOptionsBuilder from st_aggrid.shared import JsCode ################################### from functionforDownloadButtons import download_button ################################### def _max_width_(): max_width_str = f"max-width: 1800px;" st.markdown( f""" """, unsafe_allow_html=True, ) st.set_page_config(page_icon="✂️", page_title="CSV Wrangler") # st.image("https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/240/apple/285/balloon_1f388.png", width=100) st.image( "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/240/apple/285/scissors_2702-fe0f.png", width=100, ) st.title("CSV Wrangler") # st.caption( # "PRD : TBC | Streamlit Ag-Grid from Pablo Fonseca: https://pypi.org/project/streamlit-aggrid/" # ) # ModelType = st.radio( # "Choose your model", # ["Flair", "DistilBERT (Default)"], # help="At present, you can choose between 2 models (Flair or DistilBERT) to embed your text. More to come!", # ) # with st.expander("ToDo's", expanded=False): # st.markdown( # """ # - Add pandas.json_normalize() - https://streamlit.slack.com/archives/D02CQ5Z5GHG/p1633102204005500 # - **Remove 200 MB limit and test with larger CSVs**. Currently, the content is embedded in base64 format, so we may end up with a large HTML file for the browser to render # - **Add an encoding selector** (to cater for a wider array of encoding types) # - **Expand accepted file types** (currently only .csv can be imported. Could expand to .xlsx, .txt & more) # - Add the ability to convert to pivot → filter → export wrangled output (Pablo is due to change AgGrid to allow export of pivoted/grouped data) # """ # ) # # st.text("") c29, c30, c31 = st.columns([1, 6, 1]) with c30: uploaded_file = st.file_uploader( "", key="1", help="To activate 'wide mode', go to the hamburger menu > Settings > turn on 'wide mode'", ) if uploaded_file is not None: file_container = st.expander("Check your uploaded .csv") shows = pd.read_csv(uploaded_file) uploaded_file.seek(0) file_container.write(shows) else: st.info( f""" 👆 Upload a .csv file first. Sample to try: [biostats.csv](https://people.sc.fsu.edu/~jburkardt/data/csv/biostats.csv) """ ) st.stop() from st_aggrid import GridUpdateMode, DataReturnMode gb = GridOptionsBuilder.from_dataframe(shows) # enables pivoting on all columns, however i'd need to change ag grid to allow export of pivoted/grouped data, however it select/filters groups gb.configure_default_column(enablePivot=True, enableValue=True, enableRowGroup=True) gb.configure_selection(selection_mode="multiple", use_checkbox=True) gb.configure_side_bar() # side_bar is clearly a typo :) should by sidebar gridOptions = gb.build() st.success( f""" 💡 Tip! Hold the shift key when selecting rows to select multiple rows at once! """ ) response = AgGrid( shows, gridOptions=gridOptions, enable_enterprise_modules=True, update_mode=GridUpdateMode.MODEL_CHANGED, data_return_mode=DataReturnMode.FILTERED_AND_SORTED, fit_columns_on_grid_load=False, ) df = pd.DataFrame(response["selected_rows"]) st.subheader("Filtered data will appear below 👇 ") st.text("") st.table(df) st.text("") c29, c30, c31 = st.columns([1, 1, 2]) with c29: CSVButton = download_button( df, "File.csv", "Download to CSV", ) with c30: CSVButton = download_button( df, "File.csv", "Download to TXT", )