如何为Streamlit日期滑块设置可选范围(如1天或3天)
给Streamlit日期滑块设置固定可选范围
要限制日期滑块只能选择1天、3天这类固定时长的区间,可以通过预设时间范围选项+自动计算日期区间的方式实现,替代原有的无限制双滑块方案,具体修改如下:
修改后的完整代码
import pandas as pd import streamlit as st def df_filter(message, df): # 定义可选的固定时间范围 time_ranges = { "1天": pd.Timedelta(days=1), "3天": pd.Timedelta(days=3) } # 让用户选择需要的时间范围 selected_range = st.selectbox("选择时间范围", options=list(time_ranges.keys())) delta = time_ranges[selected_range] # 计算允许的最大起始日期(确保结束日期不超过数据中的最新日期) max_start_date = df['Date'].max() - delta # 用单滑块选择起始日期,结束日期自动计算 start_date = st.slider( message, min_value=df['Date'].min(), max_value=max_start_date, value=df['Date'].min() ) end_date = start_date + delta # 过滤数据 mask = df['Date'].between(start_date, end_date) filtered_df = df[mask] return filtered_df if __name__ == '__main__': df = pd.DataFrame(heartrate_new) st.header('Datetime Filter') filtered_df = df_filter('选择起始日期', df) filtered_df.sort_values(by='Date', inplace=True) container1 = st.container() with container1: st.header('Data Frame') st.write(filtered_df)
关键修改说明
- 固定范围选项:通过
selectbox提供预设的1天、3天选项,用户无法选择任意时长 - 自动计算区间:根据用户选择的时长,自动推导结束日期,确保区间长度严格符合所选范围
- 边界校验:计算
max_start_date避免结束日期超出数据中的最新日期,防止出现无数据的情况
内容的提问来源于stack exchange,提问作者alice
相关产品推荐
相关产品推荐

