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

如何不索引列过滤Pandas DataFrame中早于2023-01-01的行?

问题解决:过滤Pandas DataFrame中'est'列早于指定日期的行

错误原因分析

  1. query方法报错:query要求传入字符串格式的表达式,你直接传入布尔Series,不符合方法的参数要求。
  2. .dt访问器报错:你的est列最后通过.dt.date转换成了Python内置的date对象,而非Pandas的datetime64类型,.dt仅支持Pandas的datetime类数据,因此无法使用。

解决方案

根据你的est列创建逻辑,分两种场景处理:

场景1:保留Pandas datetime类型(推荐)

如果可以修改est列的创建代码,建议保留带时区的Pandas datetime类型,后续操作更灵活:

import pandas as pd

# 重新创建est列:保留Pandas带时区的datetime类型,不转成date对象
df["est"] = pd.to_datetime(df["t"], unit="ms").dt.tz_localize("UTC").dt.tz_convert("US/Eastern")

# 创建对应时区的 cutoff 时间戳
cutoff = pd.Timestamp("2023-01-01", tz="US/Eastern")

# 过滤数据
spot = df[df["est"] >= cutoff]

# 或者用query方法(需传入字符串表达式,用@引用外部变量)
spot = df.query("est >= @cutoff")

场景2:保留est列为Python date对象

如果必须保留est列为date类型,直接与date对象比较即可,无需.dt访问器:

from datetime import date

cutoff_date = date(2023, 1, 1)

# 直接比较过滤
spot = df[df["est"] >= cutoff_date]

# 对应query用法
spot = df.query("est >= @cutoff_date")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:23:10