如何不索引列过滤Pandas DataFrame中早于2023-01-01的行?
问题解决:过滤Pandas DataFrame中'est'列早于指定日期的行
错误原因分析
query方法报错:query要求传入字符串格式的表达式,你直接传入布尔Series,不符合方法的参数要求。.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
相关产品推荐
相关产品推荐

