Данные из видео:
id,product,category,price,quantity,month,country
1,Laptop,Electronics,1200,5,January,Germany
2,Phone,Electronics,800,12,January,France
3,Tablet,Electronics,650,7,February,Germany
4,Camera,Electronics,550,4,March,Spain
5,TV,Electronics,1400,3,April,Italy
6,Headphones,Electronics,180,20,April,France
7,Chair,Furniture,150,15,February,Germany
8,Table,Furniture,320,8,March,France
9,Sofa,Furniture,950,2,April,Italy
10,Cabinet,Furniture,700,4,May,Spain
11,Lamp,Furniture,90,25,May,Germany
12,Bookshelf,Furniture,450,6,June,France
13,T-Shirt,Clothing,40,50,January,Italy
14,Jeans,Clothing,80,30,February,Germany
15,Jacket,Clothing,180,10,March,France
16,Sneakers,Clothing,220,14,April,Spain
17,Hat,Clothing,35,40,May,Italy
18,Backpack,Clothing,95,18,June,Germany
19,Coffee Machine,Home,350,5,January,France
20,Vacuum Cleaner,Home,480,6,February,Spain
21,Microwave,Home,260,7,March,Italy
22,Kettle,Home,60,22,April,Germany
23,Blender,Home,110,13,May,France
24,Air Fryer,Home,240,9,June,Spain
25,Monitor,Electronics,420,8,May,Germany
26,Keyboard,Electronics,70,35,June,France
27,Mouse,Electronics,45,42,June,Italy
28,Desk,Furniture,520,5,June,Germany
29,Hoodie,Clothing,120,16,June,Spain
30,Toaster,Home,55,20,June,France
До этого момента наш dashboard в основном выполнял роль инструмента анализа данных. Пользователь мог загружать файлы, строить графики, применять фильтры и изучать информацию, но сами данные оставались неизменными. Однако во многих реальных проектах этого оказывается недостаточно.
Представьте систему учёта товаров. Пользователь обнаружил ошибку в цене. Или аналитик заметил некорректное название категории. Или менеджеру нужно добавить новую запись в таблицу. В подобных ситуациях неудобно каждый раз открывать Excel, вносить изменения, сохранять файл и снова загружать его в приложение.
Гораздо удобнее выполнять такие действия прямо внутри dashboard. Именно поэтому в современных версиях Streamlit появился компонент st.data_editor, который позволяет превращать обычные таблицы в полноценный интерфейс для редактирования данных.
В этом уроке мы научимся изменять данные непосредственно в приложении, разберём добавление и удаление строк, познакомимся с настройкой редактируемых столбцов и увидим, как dashboard постепенно превращается из инструмента просмотра в инструмент работы с данными.
Что вы узнаете в рамках статьи
В этом уроке мы познакомимся с интерактивным редактированием данных в Streamlit.
Мы рассмотрим:
- компонент
st.data_editor; - редактирование значений в таблицах;
- добавление новых строк;
- удаление записей;
- обновление DataFrame;
- настройку редактируемых столбцов;
- использование
column_configсовместно с редактором данных.
В результате приложение сможет не только отображать информацию, но и позволять пользователю её изменять.
Ключевые термины
st.data_editor— интерактивная таблица Streamlit с возможностью редактирования данных.- Editable Table — таблица, содержимое которой может изменять пользователь.
- Редактирование данных — изменение существующих значений в таблице.
- Добавление записи — создание новой строки данных.
- Удаление записи — удаление существующей строки.
- Обновление данных — сохранение изменений в DataFrame.
От dataframe к data_editor
До сих пор мы использовали компонент:
st.dataframe(df)
Он отлично подходит для просмотра данных, но не позволяет пользователю что-либо изменять. Если попробовать кликнуть по ячейке, ничего не произойдёт.
Для редактирования данных существует другой компонент:
st.data_editor(df)
На первый взгляд таблица выглядит почти так же, но теперь пользователь может изменять значения прямо в интерфейсе приложения.
Первое редактирование данных
Предположим, у нас есть DataFrame:
df = pd.DataFrame({
"product": [
"Laptop",
"Phone"
],
"price": [
1200,
800
]
})
Передадим его в редактор:
edited_df = st.data_editor(df)
Теперь пользователь может изменить цену или название товара. После изменения таблицы в переменной edited_df окажется уже обновлённый DataFrame.
Как работает обновление данных
Важно понимать, что исходный DataFrame автоматически не изменяется. Изменённая версия возвращается отдельно.
Например:
edited_df = st.data_editor(df)
st.write(edited_df)
Если пользователь изменит данные, именно edited_df будет содержать новые значения.
Добавление новых строк
Очень часто пользователю нужно создавать новые записи. Например, пользователь может добавить новый товар, создать клиента или внести новый заказ прямо через интерфейс приложения. Для этого можно разрешить динамическое добавление строк.
edited_df = st.data_editor(
df,
num_rows="dynamic"
)
После этого в таблице появится возможность добавлять новые строки через интерфейс Streamlit. Это один из самых удобных способов быстро расширить набор данных без использования отдельных форм.
Удаление строк
Если используется режим num_rows="dynamic" пользователь получает возможность не только добавлять записи, но и удалять существующие строки. Таким образом таблица начинает работать почти как небольшой редактор данных.
Настройка редактируемых столбцов
Иногда пользователю можно разрешить изменять только часть данных. Например, цену можно менять, а идентификатор товара — нельзя. Для этого используется параметр disabled.
Полный пример:
edited_df = st.data_editor(
df,
disabled=["id"]
)
Теперь столбец id останется доступным только для просмотра.
Наиболее частые ошибки
- Изменения не сохраняются после rerun
Обычно проблема связана с отсутствиемsession_state. - Редактируется не тот DataFrame
Пользователь изменяет данные в редакторе, но приложение продолжает использовать исходную таблицу. - Нет возможности добавить строки
Часто забывают указатьnum_rows="dynamic". - Некоторые столбцы случайно изменяются пользователем
Стоит использовать параметрdisabled.
Наиболее частые вопросы
- Можно ли полностью заменить Excel через
data_editor?
Для простых задач часто да, но для сложной табличной обработки Excel всё ещё остаётся более функциональным инструментом. - Можно ли редактировать только отдельные столбцы?
Да, через параметрdisabled. - Можно ли добавлять строки прямо из интерфейса?
Да, если используется режимnum_rows="dynamic". - Где сохраняются изменения?
По умолчанию только в памяти приложения. Для постоянного хранения данные нужно записывать в файл, базу данных или внешний сервис.
Итоги
Сегодня мы познакомились с st.data_editor и сделали ещё один важный шаг в развитии нашего dashboard. Теперь приложение умеет не только отображать данные, но и позволяет пользователю изменять их прямо в интерфейсе.