我有一个python代码,它显示数据框,允许用户通过创建新数据框来过滤数据框,并允许用户使用selectedbox中的索引号更新请求的记录
因此,我使用streamlight会话状态的新功能,我希望系统在用户使用回调功能更改selectbox的值后保留过滤后的数据帧
问题在于,一旦用户从选择框中选择值,系统将崩溃并显示以下错误:
TypeError: 'DataFrame' object is not callable
Traceback:
File "F:\AIenv\lib\site-packages\streamlit\script_runner.py", line 347, in _run_script
self._session_state.call_callbacks()
File "F:\AIenv\lib\site-packages\streamlit\state\session_state.py", line 379, in call_callbacks
self._new_widget_state.call_callback(wid)
File "F:\AIenv\lib\site-packages\streamlit\state\session_state.py", line 203, in call_callback
callback(*args, **kwargs)
import pandas as pd
import streamlit as st
def update_df(new_df):
return pd.DataFrame(new_df)
def main():
df=pd.read_csv(data)
df_result_search = pd.DataFrame.from_records(df, columns = [column[0] for column in cursor.description])
df_len = range(len(df_result_search.index))
s = st.selectbox('Select index',key="select_box",options=df_len,on_change=update_df(df_result_search))
expander_updates_fields = st.beta_expander('Update Records')
with expander_updates_fields:
for i, col in enumerate(df.columns):
if not s == 0:
val_update = st_input_update('Update {} from {} to:'.format(col, df[col].values[s]))
expander_updates_fields.markdown(val_update, unsafe_allow_html=True)
else:
st.write("DataFrame is empty")
if __name__=='__main__':
main()
根据Joran Beasley的回答
系统返回所选值,但不显示数据帧
用户选择值后,页面将刷新以下内容:
因此,我使用了回调()
我想做的是:
我如何完成这三项任务??
试着做
on_change=lambda: update_df(df_result_search)
在你基本上
on_change需要一个可以调用的函数。。。它无法调用返回的数据帧。。。在建议的解决方案中,我们只需将其转换为lambda,当select选项更改时将调用该lambda
(当然,它可能会传递某种“change_事件”,您可能应该使用它来选择列或其他内容)
...on_change= lambda evt:do_something_with_event(evt)
进一步检查后,我认为您不太了解Streamlight的工作原理
这个例子应该可以帮助您理解为什么仍然存在一些问题
相关问题 更多 >
编程相关推荐