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

Pandas中datetime作为isin条件返回False的问题排查

解决pandas日期筛选始终返回False及「bound method Timestamp.date」类型问题

问题场景

用pandas读取测量数据,df['Record Date']是datetime64[ns]类型,需要筛选出日期在plate.date(Plate类的日期列表属性)中的数据,但执行df["Record Date"].dt.date.isin(plate.date)时条件始终返回False,还出现「bound method Timestamp.date of Timestamp」的类型提示。背景是Plate类用于存储不同日期的孔位样本信息,仅需保留列表内日期的数据并添加样本属性。

问题根源

  1. Plate类日期属性赋值错误:初始化Plate时,直接把date.date赋值给了属性,没有加括号调用date.date()方法,导致plate.date列表里存的是绑定方法对象,而非实际的datetime.date日期对象。
  2. 类型不匹配:pandas的df["Record Date"].dt.date返回的是datetime.date对象序列,和plate.date里的方法对象完全不匹配,所以isin()永远无法匹配成功。

修复步骤

1. 修正Plate类的日期属性赋值

把Plate类中对date属性的赋值逻辑,从直接引用方法改成调用方法获取日期对象:

class Plate:
    def __init__(self, date_list):
        # 遍历日期列表,调用date()方法得到datetime.date对象
        self.date = [single_date.date() for single_date in date_list]

2. 验证两侧数据类型一致性

确认plate.date和pandas侧的日期类型一致:

# 检查plate.date中元素的类型
print(type(plate.date[0]))  # 应该输出 <class 'datetime.date'>
# 检查pandas侧日期元素的类型
print(type(df["Record Date"].dt.date.iloc[0]))  # 同样输出 <class 'datetime.date'>

3. 重新执行筛选逻辑

类型匹配后,筛选条件即可正常生效:

if hasattr(plate, 'date'):
    condition = df["Record Date"].dt.date.isin(plate.date)
    filtered_df = df[condition]
    # 后续处理筛选后的filtered_df

补充说明

对比可正常运行的代码relevant_df=df[df["Record Date"].dt.date.isin(dates_to_keep)],核心就是dates_to_keep是datetime.date对象列表,只要保证plate.date也是同类型列表,就能解决匹配失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:39:50