如何将日期滑块与DataFrame结合实现实时过滤?
解决Streamlit日期滑块与DataFrame联动过滤问题
问题分析
你的代码已经正确生成了日期范围的过滤掩码,但没有将过滤后的数据用于表格展示,而是直接渲染了原始DataFrame,导致滑块调整时表格无变化;另外需要确保Date列的datetime类型正确,避免过滤逻辑失效。
修复后的完整代码
import pandas as pd import streamlit as st import plotly.express as px import plotly.graph_objects as go from pandas import read_excel from PIL import Image st.set_page_config(page_title='TBI') st.header('TBI sold result') st.subheader('Info') ### --- LOAD DATAFRAME excel_file = 'Directory' sheet_name = 'Sheet2' df = pd.read_excel(excel_file, sheet_name=sheet_name, usecols='H:O', header=2) df['Release_stock'] = df['Release_stock'].fillna(0) # 确保Date列为datetime类型,避免格式不匹配 df['Date'] = pd.to_datetime(df['Date']) # --- STREAMLIT SELECTION date_list = df["Date"].dt.date.unique().tolist() date_range = st.sidebar.slider('日期范围:', min_value=min(date_list), max_value=max(date_list), value=(min(date_list), max(date_list))) # 生成过滤掩码并获取过滤后的数据集 mask = df['Date'].dt.date.between(*date_range) df_filtered = df[mask] number_of_result = df_filtered.shape[0] st.markdown(f'*有效结果数量: {number_of_result}*') # 渲染过滤后的表格 st.dataframe(df_filtered)
关键修改说明
- 将原始的
st.dataframe(df)移到过滤逻辑之后,改为渲染过滤后的df_filtered数据集 - 添加
df['Date'] = pd.to_datetime(df['Date'])强制转换日期类型,确保与滑块返回的date对象兼容 - 优化变量名(如
Model改为date_range),提升代码可读性
内容的提问来源于stack exchange,提问作者Nickname_used
相关产品推荐
相关产品推荐

