-
Notifications
You must be signed in to change notification settings - Fork 114
Labels
bugSomething isn't workingSomething isn't workingdata frameRelated to @render.data_frameRelated to @render.data_frame
Milestone
Description
Hi, discovered some exception thrown when using .data_view()
with table that has been recently cleared.
Let me show an example as it clearly demonstrate the issue.
from shiny import App, ui, reactive, render
import pandas as pd
app_ui = ui.page_fluid(
ui.input_action_button("add_row", "Add row"),
ui.input_action_button("clear_table", "Clear table"),
ui.output_text("number_of_selected_rows"),
ui.output_data_frame("df1"),
)
def server(input):
df = reactive.Value(pd.DataFrame(columns=["A", "B"]))
@render.data_frame
def df1():
return render.DataGrid(df(), selection_mode="rows")
@reactive.effect
@reactive.event(input.add_row)
def _():
old_df = df()
new_df = pd.concat([old_df, pd.DataFrame([[1, 2]], columns=["A", "B"])])
df.set(new_df)
@render.text
def number_of_selected_rows():
df_selected = df1.data_view(selected=True)
return f"Selected rows: {len(df_selected)}"
@reactive.effect
@reactive.event(input.clear_table)
def _():
df.set(pd.DataFrame(columns=["A", "B"]))
app = App(app_ui, server)
When you add a row, click on it and click the clear button you get:
Exception/Error that I got:
Traceback (most recent call last):
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/indexing.py", line 1714, in _get_list_axis
return self.obj._take_with_is_copy(key, axis=axis)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/generic.py", line 4153, in _take_with_is_copy
result = self.take(indices=indices, axis=axis)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/generic.py", line 4133, in take
new_data = self._mgr.take(
^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/internals/managers.py", line 891, in take
indexer = maybe_convert_indices(indexer, n, verify=verify)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/indexers/utils.py", line 282, in maybe_convert_indices
raise IndexError("indices are out-of-bounds")
IndexError: indices are out-of-bounds
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/session/_session.py", line 1220, in output_obs
value = await renderer.render()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/render/renderer/_renderer.py", line 255, in render
value = await self.fn()
^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/render/renderer/_renderer.py", line 349, in __call__
return await self._fn()
^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/_utils.py", line 263, in fn_async
return fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/Projects/InnovationLead/playground/app_df.py", line 28, in number_of_selected_rows
df_selected = df1.data_view(selected=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/render/_data_frame.py", line 285, in data_view
return self._data_view_selected()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/reactive/_reactives.py", line 283, in __call__
return _utils.run_coro_sync(self.get_value())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/_utils.py", line 378, in run_coro_sync
coro.send(None)
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/reactive/_reactives.py", line 293, in get_value
raise self._error[0]
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/reactive/_reactives.py", line 328, in _run_func
self._value.append(await self._fn())
^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/_utils.py", line 263, in fn_async
return fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/render/_data_frame.py", line 524, in self__data_view_selected
return _subset_data_view(selected=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/shiny/render/_data_frame.py", line 515, in _subset_data_view
return data.iloc[data_view_indices]
~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/indexing.py", line 1191, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/indexing.py", line 1743, in _getitem_axis
return self._get_list_axis(key, axis=axis)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pasza/miniconda3/envs/shiny/lib/python3.12/site-packages/pandas/core/indexing.py", line 1717, in _get_list_axis
raise IndexError("positional indexers are out-of-bounds") from err
IndexError: positional indexers are out-of-bounds
I think something's wrong inside shiny, am I right?
Initially, I thought df1.data_view(selected=False)
is just None
but the error is weird, but it's not the case.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingdata frameRelated to @render.data_frameRelated to @render.data_frame