You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:35:21