Bad sortColumnIdx error with st.dataframe

Hi, I am new to streamlit. I used st.dataframe to render a table. I noticed that when I sorted by a column and then when I changed a state of a widget, I got the following error. I am using the latest version of streamlit. I was wondering if this will be fixed.

Hello again @gunabam!

Can you post a minimum working example over that creates this error?

It looks like a negative value was somehow passed to sort your dataframe and the widget that you changed (I’m assuming this widget controls how to sort the table?) has gone into the negatives.

You can usually control the minimum and maximum values of a widget with: min_value= some_number and max_value= some_number, but not knowing which widget or anything about your code its hard to say!

Happy Streamlit-ing!
Marisa

Hi @Marisa_Smith
Thank you for your help. Here is the code that I am trying. I wanted to first show an empty table, which will later get updated with more data. I find that after I click Button, then sort by C2, then click the button No function, this error pops up. How would I fix this. If I don’t do the sort, this works perfectly fine. Much help appreciated on this! I added some images depicting the problem.



import streamlit as st
import pandas as pd


class Table:
    def __init__(self, header, column_options):

        # variables
        self.header = header
        self.column_options = column_options
        self.table = pd.DataFrame(columns=self.column_options)

        # functions
        self.initalize_view()

    def initalize_view(self):

        self.title_cell = st.subheader(self.header)
        self.column_options_cell = st.multiselect('Select columns to view',
                                                  self.column_options,
                                                  default=self.column_options)
        self.df_cell = st.dataframe(self.table)

    def update_view(self, df):

        if df.empty == False:
            self.table = df
        else:
            self.table = pd.DataFrame(columns=self.column_options)
        self.table = self.table[self.column_options_cell]
        self.df_cell.dataframe(self.table)

# data
sample_data = [{"C1": 1, "C2": 1, "C3": [], "C4": True},
               {"C1": 2, "C2": 2, "C3": ['1', '2'], "C4": False},
               {"C1": -3, "C2": -3, "C3": ['2'], "C4": True}]
sample_df = pd.DataFrame(sample_data)

# set widgets
header = 'sample data'
column_options = ['C1', 'C2', 'C3', 'C4']
sample_table = Table(header, column_options)
a = st.button('Button')
b = st.button('No function')

# actions
if a:
    sample_table.update_view(sample_df)