Auto-Generate Index for st.data_editor?

Hello! I have been working on a Streamlit app that is hosted on Snowflake. st.data_editor was acting fine until a few days ago when I realized it suddenly needed an index column to retain data from new rows. However, manually adding the index is a bit inconvenient, especially since I didn’t have to before. Is there a way to auto-generate the index each time a new row is added? I tried making it a default with column_config, but the table reset each time it changed. If I need to use session_state, I can’t seem to find the right method to do that.

Thanks!

Hi Sarah

To handle the situation where you need an auto-generated index in a st.data_editor in Streamlit, you can use st.session_state to store and manage the table data.

import streamlit as st
import pandas as pd

# Inicializar el estado de la sesión si no existe
if 'data' not in st.session_state:
    # Crear un DataFrame vacío con una columna de índice
    st.session_state.data = pd.DataFrame(columns=['Index', 'Col1', 'Col2'])

# Función para añadir una nueva fila
def add_row():
    new_index = len(st.session_state.data) + 1  # Generar un nuevo índice
    new_row = pd.DataFrame({'Index': [new_index], 'Col1': [''], 'Col2': ['']})
    st.session_state.data = pd.concat([st.session_state.data, new_row], ignore_index=True)

# Botón para añadir una nueva fila
if st.button('Añadir fila'):
    add_row()

# Mostrar el editor de datos
edited_data = st.data_editor(
    st.session_state.data,
    column_config={
        'Index': st.column_config.NumberColumn("Índice"),  # Sin editable
        'Col1': st.column_config.TextColumn("Columna 1"),
        'Col2': st.column_config.TextColumn("Columna 2"),
    },
    key='data_editor'
)

# Actualizar el estado de la sesión con los datos editados
st.session_state.data = edited_data

# Mostrar los datos actuales
st.write("Datos actuales:")
st.write(st.session_state.data)