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

如何筛选含时区信息的datetime列中指定时间的所有行?

问题原因与解决方案

你的问题出在直接用datetime构造器给tzinfo传pytz时区对象的方式上。US/Eastern是包含夏令时规则的时区,datetime构造器的tzinfo参数无法正确处理pytz时区的夏令时逻辑,导致你生成的query_dt和DataFrame中存储的dt列对象,虽然表面时间显示一致,但内部的时区元数据或偏移规则不匹配,最终==判断无法命中。

解决方法一:用pytz的localize方法构造正确时区时间

先构造无时区的naive datetime,再通过pytz的localize方法绑定时区,这个方法会严格处理夏令时规则:

import pytz
import datetime

eastern = pytz.timezone('US/Eastern')
# 先创建不带时区的时间对象
query_dt_naive = datetime.datetime(2023, 1, 1, 12, 0)
# 用localize绑定时区,is_dst=None会强制检查时间是否合法(避免夏令时过渡问题)
query_dt = eastern.localize(query_dt_naive, is_dst=None)
df_sub = df[df.dt == query_dt]

解决方法二:用pandas直接构造带时区的时间(更简便)

利用pandas的to_datetime方法直接生成匹配DataFrame时区格式的datetime对象,无需手动处理pytz的细节:

import pandas as pd

# 直接构造带US/Eastern时区的时间
query_dt = pd.to_datetime('2023-01-01 12:00:00').tz_localize('US/Eastern')
df_sub = df[df.dt == query_dt]

额外验证技巧

如果还是不确定,可以打印两者的tzinfo属性和timestamp()值,看是否完全一致:

print(df.dt.iloc[0].tzinfo)
print(query_dt.tzinfo)
print(df.dt.iloc[0].timestamp())
print(query_dt.timestamp())

只要timestamp值相同,就说明是同一个时间点,此时用==判断应该能匹配成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:07:25