Skip to content

Streamlit DataFrame: Mostrando, Estilizando y Optimizando Pandas DataFrames

En el ámbito de la ciencia de datos, la capacidad de visualizar e interactuar con tus datos es fundamental. Streamlit, una biblioteca de Python, ha revolucionado la forma en que interactuamos con los datos, facilitando más que nunca la creación de aplicaciones web interactivas y ricas en datos. Una de las características más poderosas de Streamlit es su capacidad para trabajar con DataFrames, la estructura de datos utilizada por la popular biblioteca de manipulación de datos, Pandas. En este artículo, nos adentraremos en el mundo de Streamlit DataFrame, explorando cómo mostrar, estilizar y optimizar tus Pandas DataFrames para una experiencia de análisis de datos fluida.

¿Qué es Streamlit DataFrame?

Streamlit DataFrame es una característica de la biblioteca Streamlit que te permite mostrar Pandas DataFrames de manera interactiva y visualmente atractiva. Es como llevar tu DataFrame de Pandas estándar, que normalmente se visualiza en un formato estático en un cuaderno Jupyter o un script de Python, y darle vida en una aplicación web dinámica.

La característica DataFrame de Streamlit está construida sobre Pandas, que es una potente biblioteca de manipulación de datos en Python. Los Pandas DataFrames son estructuras de datos tabulares bidimensionales, mutables en tamaño y heterogéneas, con ejes etiquetados. Son increíblemente versátiles y son un elemento básico en el arsenal de cualquier científico de datos. Streamlit mejora la funcionalidad de los Pandas DataFrames al proporcionar una plataforma donde se pueden mostrar y manipular de forma interactiva.

Tutorial de Streamlit DataFrame

¿Has oído hablar de esta increíble herramienta de análisis y visualización de datos, que puede convertir fácilmente tu aplicación de Streamlit en Tableau?

PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incrustar fácilmente una interfaz similar a Tableau en tu propia aplicación de Streamlit sin esfuerzo. Echa un vistazo a este increíble video producido por Cómo explorar datos con PyGWalker en Python (opens in a new tab) que demuestra los pasos detallados para potenciar tu aplicación de Streamlit con esta potente Biblioteca de Visualización de Datos en Python!


Agradecimientos especiales a Sven y su gran contribución (opens in a new tab) a la comunidad de PyGWalker.

Además, también puedes consultar la Página de GitHub de PyGWalker (opens in a new tab) para obtener más ejemplos de PyGWalker.

Comienza con Streamlit DataFrames

Para empezar con Streamlit DataFrame, primero debes instalar Streamlit. Puedes hacer esto ejecutando el comando pip install streamlit en tu terminal. Una vez instalado Streamlit, puedes importarlo en tu script de Python junto con Pandas.

import streamlit as st
import pandas as pd

A continuación, creemos un DataFrame simple para mostrar. Para este ejemplo, utilizaremos un DataFrame con datos sobre diferentes tipos de frutas.

data = {
    'Fruit': ['Manzana', 'Plátano', 'Cereza', 'Dátil', 'Baya de saúco'],
    'Cantidad': [10, 15, 20, 25, 30],
    'Precio': [0.5, 0.25, 0.75, 1.0, 2.0]
}
df = pd.DataFrame(data)

Para mostrar este DataFrame en Streamlit, todo lo que necesitas hacer es usar la función st.dataframe().

st.dataframe(df)

Cuando ejecutes tu aplicación de Streamlit, verás tu DataFrame mostrado como una tabla interactiva. Puedes ordenar la tabla haciendo clic en los encabezados de las columnas, y puedes ajustar el ancho y alto de la tabla arrastrando las esquinas.

Este es solo un ejemplo básico de lo que puedes hacer con Streamlit DataFrame. A medida que te adentres en este tema, descubrirás una gran cantidad de características y técnicas que pueden ayudarte a llevar tu visualización de datos al siguiente nivel.

Mostrar DataFrames en Streamlit

Cómo Mostrar un DataFrame como una Tabla Interactiva Usando Streamlit

Mostrar un DataFrame como una tabla interactiva en Streamlit es tan simple como usar la función st.dataframe(), como hemos visto en la sección anterior. Sin embargo, hay más que eso que simplemente mostrar el DataFrame. También puedes personalizar la visualización para adaptarla a tus necesidades.

Por ejemplo, puedes establecer el número de filas a mostrar usando el parámetro height. Esto puede ser particularmente útil cuando trabajas con DataFrames grandes. Aquí tienes un ejemplo:

st.dataframe(df, height=300)

En este ejemplo, el DataFrame se mostrará con una altura que se ajusta a 300 píxeles, que corresponde aproximadamente a 10 filas. Si el DataFrame tiene más de 10 filas, aparecerá una barra de desplazamiento que te permitirá desplazarte por los datos.

También puedes resaltar celdas específicas en el DataFrame basándote en ciertas condiciones. Por ejemplo, puedes resaltar las celdas que contienen valores por encima de un umbral determinado. Puedes hacer esto utilizando el método style del DataFrame, de la siguiente manera:

st.dataframe(df.style.highlight_max(axis=0))

En este ejemplo, se resaltan las celdas con los valores máximos en cada columna. Puedes personalizar el resaltado para adaptarlo a tus necesidades modificando las condiciones dentro del método highlight_max().

Manejo de DataFrames grandes en Streamlit

Trabajar con DataFrames grandes en Streamlit puede ser un poco desafiante, especialmente cuando se trata de rendimiento y usabilidad. Sin embargo, Streamlit proporciona varias características que pueden ayudarte a manejar eficazmente los DataFrames grandes. Una de las características es la paginación. La paginación te permite mostrar un DataFrame grande en fragmentos más pequeños y manejables. Esto puede ser especialmente útil cuando estás trabajando con un DataFrame que tiene cientos o incluso miles de filas.

Para implementar la paginación en Streamlit, puedes usar la función st.beta_container() junto con un bucle for. Aquí tienes un ejemplo:

container = st.beta_container()
for i in range(0, len(df), 50):
    container.dataframe(df[i:i+50])

En este ejemplo, el DataFrame se divide en fragmentos de 50 filas cada uno, y cada fragmento se muestra en un contenedor separado. Puedes navegar por los fragmentos utilizando la barra de desplazamiento.

Estilizar DataFrames en Streamlit

¿Puedo Estilizar un DataFrame Usando CSS en Streamlit?

Sí, puedes estilizar un DataFrame en Streamlit usando CSS. Streamlit te permite aplicar estilos CSS a tu DataFrame utilizando la función st.markdown(). Esta función te permite escribir código HTML y CSS directamente en tu aplicación de Streamlit.

Por ejemplo, puedes cambiar el color de fondo de tu DataFrame de la siguiente manera:

st.markdown("""
<style>
table {background-color: #f0f0f0;}
</style>
""", unsafe_allow_html=True)
st.dataframe(df)

En este ejemplo, se utiliza la función st.markdown() para definir un estilo CSS que cambia el color de fondo de la tabla a gris claro. El parámetro unsafe_allow_html=True es necesario para permitir el uso de HTML y CSS en el markdown.

Estilizar DataFrames en Streamlit

Además de CSS, Streamlit también proporciona varias funciones integradas para estilizar tu DataFrame. Estas funciones te permiten aplicar varios estilos a tu DataFrame, como resaltar celdas específicas, cambiar el color del texto y más.

Por ejemplo, puedes usar la función highlight_max() para resaltar las celdas con los valores máximos en cada columna, como hemos visto antes. También puedes usar la función background_gradient() para aplicar un degradado de color a tu DataFrame, así:

st.dataframe(df.style.background_gradient(cmap='Blues'))

En este ejemplo, se aplica un degradado de color al DataFrame, donde la intensidad del color corresponde a los valores en el DataFrame. El parámetro cmap especifica el mapa de colores a usar para el degradado.

Optimizar DataFrames en Streamlit

Cómo Optimizar un DataFrame de Pandas Usando Streamlit

Optimizar un DataFrame de Pandas en Streamlit implica mejorar su rendimiento y eficiencia, especialmente cuando se trabaja con conjuntos de datos grandes. Streamlit proporciona varias características que pueden ayudarte a optimizar tu DataFrame, como el almacenamiento en caché y la optimización de memoria.

El almacenamiento en caché en Streamlit puede mejorar significativamente el rendimiento de tu aplicación al trabajar con DataFrames grandes. Al utilizar el decorador @st.cache, puedes asegurarte de que tu DataFrame se calcule solo una vez y el resultado se almacene en caché para las ejecuciones posteriores. Aquí tienes un ejemplo:

@st.cache
def load_data():
    # Carga tu DataFrame aquí
    df = pd.read_csv('large_dataset.csv')
    return df
 
df = load_data()
st.dataframe(df)

En este ejemplo, la función load_data(), que carga un DataFrame grande desde un archivo CSV, está decorada con @st.cache. Esto significa que el DataFrame se carga solo una vez y el resultado se almacena en caché. Cuando ejecutas tu aplicación de Streamlit nuevamente, el DataFrame se carga desde la caché en lugar de calcularse nuevamente, lo que puede ahorrar mucho tiempo.

Almacenamiento en Caché de DataFrames en Streamlit y Consejos de Rendimiento

Aprovechar el poder del almacenamiento en caché en Streamlit puede mejorar significativamente el rendimiento de tu aplicación. Sin embargo, es crucial usarlo con prudencia para evitar comportamientos inesperados. Aquí tienes algunos puntos clave a tener en cuenta:

  • Parámetros de Entrada de la Función: El decorador @st.cache almacena en caché los resultados según los parámetros de entrada de la función. Si estos parámetros cambian, la función se volverá a calcular. Esta característica puede ser particularmente útil cuando quieres actualizar tu DataFrame según la entrada del usuario.
@st.cache
def load_data(file_name):
    # Carga tu DataFrame aquí
    df = pd.read_csv(file_name)
    return df
 
# Entrada del usuario para el nombre del archivo
file_name = st.text_input('Ingrese el nombre del archivo')
df = load_data(file_name)
st.dataframe(df)
  • Mutación de Salida: Streamlit te permite almacenar en caché funciones que mutan su salida utilizando el parámetro allow_output_mutation=True en el decorador @st.cache. Sin embargo, ten cuidado, ya que esto puede llevar a comportamientos inesperados si no se usa correctamente.
@st.cache(allow_output_mutation=True)
def load_and_process_data(file_name):
    # Carga y procesa tu DataFrame aquí
    df = pd.read_csv(file_name)
    df['nueva_columna'] = df['columna_antigua'].apply(alguna_funcion)
    return df
  • Límite de Visualización del DataFrame: Al tratar con DataFrames grandes, es recomendable limitar la cantidad de datos mostrados a la vez. Puedes lograr esto utilizando el parámetro height en la función st.dataframe(). Esto puede mejorar significativamente el rendimiento de tu aplicación y mejorar la experiencia del usuario.
# Mostrar solo una porción del DataFrame
st.dataframe(df, height=300)

Streamlit DataFrame: Casos de Uso Avanzados

Filtrado de DataFrames en Streamlit

El filtrado es una operación común en el análisis de datos que te permite seleccionar un subconjunto de tus datos según ciertas condiciones. En Streamlit, puedes implementar fácilmente el filtrado de DataFrames utilizando los widgets interactivos proporcionados por la biblioteca.

Por ejemplo, puedes usar un cuadro de selección para permitir al usuario seleccionar una columna para filtrar y un deslizador para seleccionar el rango de valores a incluir. Aquí tienes un ejemplo:

columna = st.selectbox('Seleccionar columna para filtrar', df.columns)
valor_min, valor_max = st.slider('Seleccionar rango de valores', min(df[columna]), max(df[columna]), (min(df[columna]), max(df[columna])))
df_filtrado = df[(df[columna] >= valor_min) & (df[columna] <= valor_max)]
st.dataframe(df_filtrado)

En este ejemplo, el usuario puede seleccionar una columna para filtrar desde una caja de selección y un rango de valores desde un slider. Dataframe es filtrado en base a estas selecciones y el dataframe filtrado es mostrado.

Streamlit Dataframes en Machine Learning

Streamlit no es solo para visualizar datos, también es una herramienta poderosa para machine learning. Puedes utilizar Streamlit para crear aplicaciones interactivas de machine learning, donde puedes mostrar tus datos, entrenar tus modelos y visualizar tus resultados, todo en un solo lugar.

Por ejemplo, puedes utilizar una aplicación de Streamlit para mostrar un dataframe de tus datos de entrenamiento, con opciones para filtrar y ordenar los datos. Luego puedes utilizar un botón para entrenar un modelo de machine learning con estos datos y mostrar los resultados en una gráfica interactiva.

Aquí tienes un ejemplo sencillo:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
 
# Mostrar el dataframe
st.dataframe(df)
 
# Botón para entrenar el modelo
if st.button('Entrenar Modelo'):
    # Dividir los datos en conjuntos de entrenamiento y prueba
    X_train, X_test, y_train, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
 
    # Entrenar el modelo
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train, y_train)
 
    # Hacer predicciones y calcular la precisión
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
 
    # Mostrar la precisión
    st.write(f'Precisión: {accuracy*100:.2f}%')

En este ejemplo, se entrena un RandomForestClassifier en un DataFrame df, con 'target' como la variable objetivo. La precisión del modelo se muestra en la aplicación de Streamlit.

Este es solo un ejemplo sencillo de lo que puedes hacer con Streamlit en el ámbito del machine learning. Las posibilidades son infinitas y, gracias a la naturaleza interactiva de Streamlit, puedes crear aplicaciones de machine learning potentes y fáciles de usar.

Conclusión

Streamlit ha revolucionado la forma en que interactuamos con los datos, facilitando más que nunca la creación de aplicaciones web interactivas y ricas en datos. Su capacidad para trabajar sin problemas con los DataFrames de Pandas ha abierto un mundo de posibilidades para la visualización y el análisis de datos. Ya seas un científico de datos experimentado o un principiante que está comenzando, Streamlit ofrece una plataforma poderosa y fácil de usar para mostrar, estilizar y optimizar tus DataFrames.

Entonces, ¿por qué esperar? ¡Sumérgete y comienza a explorar el mundo de los DataFrame de Streamlit hoy mismo!

¿Has oído hablar de esta increíble herramienta de análisis y visualización de datos, que convierte tu aplicación de Streamlit en Tableau?

PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incrustar fácilmente una interfaz similar a Tableau en tu propia aplicación de Streamlit sin esfuerzo.

PyGWalker para visualización de datos en Streamlit (opens in a new tab)

Preguntas frecuentes

  1. ¿Cómo puedo estilizar un DataFrame en Streamlit? Puedes estilizar un DataFrame en Streamlit utilizando tanto CSS como funciones de estilizado incorporadas. Por ejemplo, puedes cambiar el color de fondo de tu DataFrame utilizando CSS o aplicar un gradiente de color utilizando la función background_gradient().

  2. ¿Cómo puedo filtrar un DataFrame en Streamlit? Streamlit proporciona widgets interactivos que puedes utilizar para filtrar tu DataFrame. Por ejemplo, puedes utilizar una caja de selección para permitir al usuario seleccionar una columna para filtrar y un slider para seleccionar el rango de valores a incluir.

  3. ¿Puedo mostrar imágenes en un DataFrame en Streamlit? Sí, puedes mostrar imágenes en un DataFrame en Streamlit. Puedes utilizar la función st.image() para mostrar imágenes almacenadas en un DataFrame. Sin embargo, las imágenes deben estar almacenadas como URL o datos binarios para que esto funcione.