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

如何基于带时区的datetime对象查询DataFrame并初始化tzinfo

解决带时区偏移的Datetime查询问题

先确保DataFrame的dt列是带时区的datetime类型

如果你的dt列目前是字符串格式,先通过pandas转换为带时区感知的datetime类型:

import pandas as pd

# 转换字符串列为带时区的datetime
df['dt'] = pd.to_datetime(df['dt'])

pd.to_datetime会自动识别字符串中的+01:00偏移,生成tz-aware的datetime对象。

方法1:直接用字符串解析目标时间(最简便)

不需要手动构建datetime对象,直接用pd.to_datetime解析目标时间字符串,然后进行筛选:

# 解析目标时间
target_time = pd.to_datetime("2021-01-01 12:00:00+01:00")
# 筛选匹配的记录
result_df = df[df['dt'] == target_time]

方法2:手动创建带时区偏移的datetime对象

如果你需要手动构建datetime对象,可以用两种方式:

方式A:使用固定时区偏移(适合非夏令时固定偏移场景)

from datetime import datetime, timedelta, timezone

# 创建+01:00的时区偏移对象
tz_offset = timezone(timedelta(hours=1))
# 构建目标datetime
target_time = datetime(2021, 1, 1, 12, 0, 0, tzinfo=tz_offset)
# 筛选
result_df = df[df['dt'] == target_time]

方式B:使用具体时区(适合需要处理夏令时的场景)

Python3.9+自带zoneinfo模块,可直接使用具体时区(比如Europe/Paris对应+01:00/UTC+1):

from datetime import datetime
from zoneinfo import ZoneInfo

# 构建带具体时区的datetime
target_time = datetime(2021, 1, 1, 12, 0, 0, tzinfo=ZoneInfo("Europe/Paris"))
# 筛选
result_df = df[df['dt'] == target_time]

注意事项

  • 必须保证df['dt']和target_time都是**带时区感知(tz-aware)**的datetime对象,否则直接比较会报错。
  • 如果你的Python版本低于3.9,可以安装pytz库替代zoneinfo,用法类似:import pytz; tz = pytz.timezone("Europe/Paris")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:32