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

基于Streamlit的date_input函数筛选DataFrame时出现报错问题咨询

报错核心原因

是时间类型不匹配导致的比较运算失败:

  • Streamlit的st.date_input() 组件返回值为Python原生datetime.date类型,仅包含日期维度信息,无时分秒
  • 你的DataFrame中CREATEDDATE列为datetime64[ns]类型(带时分秒的时间戳类型),两类不同的时间格式无法直接进行大小比较,因此触发类型错误

解决方案

有两种常用的适配方案可选:

方案1:将输入的日期转换为pandas datetime类型

import pandas as pd

df = ld.load_data_projet()

# 转换输入日期为datetime类型
start_date = pd.to_datetime(st.date_input('Date de début :'))
end_date = pd.to_datetime(st.date_input('Date de fin :'))

if start_date < end_date:
    # 结束日期补全到当天23:59:59,覆盖当日所有时间范围的数据
    end_date = end_date + pd.Timedelta(days=1) - pd.Timedelta(seconds=1)
    mask = (df['CREATEDDATE'] > start_date) & (df['CREATEDDATE'] <= end_date)
    df = df.loc[mask]
    st.dataframe(df)
else:
    st.error('Error: Date de fin doit être choisi après la date de début.')

方案2:将DataFrame的时间列转换为date类型后比较

df = ld.load_data_projet()

start_date = st.date_input('Date de début :')
end_date = st.date_input('Date de fin :')

if start_date < end_date:
    # 提取时间列的日期部分做比较
    mask = (df['CREATEDDATE'].dt.date > start_date) & (df['CREATEDDATE'].dt.date <= end_date)
    df = df.loc[mask]
    st.dataframe(df)
else:
    st.error('Error: Date de fin doit être choisi après la date de début.')

额外优化提示

你原有代码中即使日期校验不通过,筛选逻辑依然会执行,建议把筛选、展示表格的逻辑都放到日期校验通过的分支内,避免异常数据输出。

内容的提问来源于stack exchange,提问作者Ib D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:54:02