Streamlit-AgGrid日期过滤失效问题求助
问题:Streamlit AgGrid日期过滤失效,要么无结果要么无过滤效果
我在Streamlit中使用AgGrid组件时遇到日期过滤失效问题,使用过滤功能时要么返回空结果,要么完全没有过滤效果。相关场景:
- 过滤前:展示原始包含日期列的表格
- 使用大于过滤后:无匹配结果
- 使用等于过滤后:无过滤效果
我的代码如下:
st.markdown(hide_menu,unsafe_allow_html=True) file_upload = st.file_uploader('Upload file','.xlsx') if file_upload is not None: df = pd.read_excel(file_upload) #st.checkbox("Use container width", value=False, key="use_container_width") #Installation Duration df['Installation_Actual_End'] = pd.to_datetime(df["Installation_Actual_End"]) df['Installation_Actual_Start'] = pd.to_datetime(df["Installation_Actual_Start"]) df['Installation_Duration'] = df["Installation_Actual_End"] - df["Installation_Actual_Start"] df["Installation_Duration"] = df["Installation_Duration"] df1 = df['Installation_Actual_Start','Installation_Actual_End','Integration'] AgGrid(df1)
排查原因
- 日期列未被AgGrid正确识别:虽用
pd.to_datetime转换了Pandas日期类型,但AgGrid默认未将其解析为前端可识别的日期格式,过滤逻辑无法匹配。 - DataFrame列选取语法错误:
df['col1','col2']是错误的Pandas列选取方式,正确应为df[['col1','col2']],语法错误可能导致数据传递异常。 - 未配置日期列渲染参数:默认情况下AgGrid将日期列当作普通字符串处理,字符串比较逻辑与日期不同,导致过滤失效。
解决方法
1. 修正列选取语法
把错误的列选取代码改为:
df1 = df[['Installation_Actual_Start','Installation_Actual_End','Integration']]
2. 配置AgGrid日期列过滤规则
使用GridOptionsBuilder指定日期列类型,让AgGrid正确解析并启用日期过滤组件:
from st_aggrid import AgGrid, GridOptionsBuilder if file_upload is not None: df = pd.read_excel(file_upload) # 转换日期并处理异常值 df['Installation_Actual_End'] = pd.to_datetime(df["Installation_Actual_End"], errors='coerce') df['Installation_Actual_Start'] = pd.to_datetime(df["Installation_Actual_Start"], errors='coerce') df = df.dropna(subset=['Installation_Actual_Start', 'Installation_Actual_End']) # 选取目标列 df1 = df[['Installation_Actual_Start','Installation_Actual_End','Integration']] # 构建GridOptions gb = GridOptionsBuilder.from_dataframe(df1) # 配置日期列的过滤和显示格式 gb.configure_column('Installation_Actual_Start', type=['dateColumnFilter', 'customDateTimeFormat'], custom_format_string='yyyy-MM-dd HH:mm:ss') gb.configure_column('Installation_Actual_End', type=['dateColumnFilter', 'customDateTimeFormat'], custom_format_string='yyyy-MM-dd HH:mm:ss') gb.configure_grid_options(enableFilter=True) grid_options = gb.build() # 渲染AgGrid AgGrid(df1, gridOptions=grid_options, use_container_width=True)
3. 清理无效日期数据
转换日期时添加errors='coerce'将无效日期转为NaT,再通过dropna删除含空日期的行,避免异常数据干扰过滤逻辑。
内容的提问来源于stack exchange,提问作者Sabx2x1x
相关产品推荐
相关产品推荐

