pandas 数据框按日期时间过滤行

问题描述 投票:0回答:1

我有一个数据框,其中(非索引)列名为“est”。 我想过滤掉日期时间早于 2023 年 1 月 1 日的行。 我尝试如下

spot = df.query(df.est >= date(year=2023, month=1, day=1))
spot = df[df['est'].dt >= date(year=2023, month=1, day=1)]

但其抛出错误为

ValueError: expr must be a string to be evaluated, <class 'pandas.core.series.Series'> given
AttributeError: Can only use .dt accessor with datetimelike values. Did you mean: 'at'?

est 列是从列“t”创建的——其中 t 具有以毫秒为单位的 UTC unix 时间戳 (1/1000),如 1656662400000、1656668700000。并且 est 列是使用下面的代码创建的

df["est"] = pd.to_datetime(df["t"], unit="ms")
df["est"] = df["est"].dt.tz_localize("UTC").dt.tz_convert("US/Eastern").dt.date

我尝试了一些其他方法但失败了,在网上搜索但大多数结果显示在对列进行索引后使用 .loc。 如何在不索引列的情况下过滤数据? 谢谢!

python pandas dataframe
1个回答
0
投票

只需使用布尔索引并阅读索引和选择数据

import pandas as pd

# sample df
df = pd.DataFrame({'est': pd.date_range('2024-01-01', '2024-01-31')})
# filter dates greater than 2024-01-10
df[df['est'].gt('2024-01-10')]

首先确保您的数据是日期时间

df['est] = pd.to_datetime(df['est'])

© www.soinside.com 2019 - 2024. All rights reserved.