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

Pandas按指定日期筛选DataFrame返回空结果的原因排查

问题原因及解决方法

核心原因

筛选后返回空DataFrame的关键问题是类型不匹配:

  • 经过pd.to_datetime()转换后,df["datum"]的类型是Timestamp(即使原数据只有日期,也会默认带上00:00:00的时间部分);
  • 而你传入的date参数是字符串类型,直接用==比较时,字符串和Timestamp无法匹配,导致筛选结果为空。

解决方法

方法1:将传入的字符串日期转为Timestamp类型

直接把date参数也转换成datetime类型,让两边类型统一后再比较:

def select_by_date(df: pd.DataFrame, date: str = None):
    if date:
        log.info(f"Using data from {date}")
        df["datum"] = pd.to_datetime(df['datum'])
        # 将date转为Timestamp后再比较
        return df.loc[(df["datum"] == pd.to_datetime(date))]
    else:
        log.warn(f"No date provided")
        return input_sendungen

方法2:提取日期部分进行比较(适用于datum列包含具体时间的场景)

如果你的datum列转换后不仅有日期,还有具体时分秒(比如2021-04-21 14:30:00),可以提取日期部分再和目标日期对比:

def select_by_date(df: pd.DataFrame, date: str = None):
    if date:
        log.info(f"Using data from {date}")
        df["datum"] = pd.to_datetime(df['datum'])
        # 提取datum列的日期部分,和目标日期的date对象比较
        target_date = pd.to_datetime(date).date()
        return df.loc[(df["datum"].dt.date == target_date)]
    else:
        log.warn(f"No date provided")
        return input_sendungen

额外注意事项

  • 确保传入的date字符串格式和datum列转换前的格式一致(比如都是YYYY-MM-DD),避免转换失败;
  • 如果不想修改原DataFrame的datum列类型,可以用临时转换的方式,比如df['datum'].astype('datetime64[ns]')代替直接赋值。

内容的提问来源于stack exchange,提问作者daniel guo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:15:39