Я новичок в Streamlit, и я работаю над проблемой, когда я пытаюсь создать несколько вводов чисел на основе количества выбранных столбцов и количества значений, выбранных для ввода чисел. Я могу создавать числовые входы в соответствии с выбранными столбцами, а также с кадром данных. Но этот фрейм данных не обновляется, когда я ввожу новый номер в поле ввода.
Это код, над которым я работаю:
import streamlit as st
import pandas as pd
exogenous_features = ['Var1', 'Var2']
predict_size = 4
cols = st.columns(len(exogenous_features))
lists = []
for p in range(len(exogenous_features)):
lists.append([])
for i, c in enumerate(cols):
with c:
for h in range(predict_size):
a=st.number_input('',key=str(random.randint(0,100000)))
lists[i].append(a)
df= pd.DataFrame(lists)
df= bb.transpose()
df.columns = exogenous_features
st.write(df)
Вот исправленная версия вашего кода. Примечание: каждый новый st.number_input должен иметь уникальный key, иначе вы всегда будете сталкиваться с ошибкой DuplicateWidgetID:.
import streamlit as st
import pandas as pd
exogenous_features = ['Var1', 'Var2']
predict_size = 4
cols = st.columns(len(exogenous_features))
lists = []
for p in range(len(exogenous_features)):
lists.append([])
for i, c in enumerate(cols):
with c:
for h in range(predict_size):
key = f"number_input_{i}_{h}"
a = st.number_input(exogenous_features[i], key=key)
lists[i].append(a)
df = pd.DataFrame(lists)
df = df.transpose()
df.columns = exogenous_features
st.write(df)
Выход: