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

消除pytz zone属性警告,获取本地时区过滤指定时间数据

消除pytz时区警告并实现跨时区本地时间数据筛选

问题背景

  • 收到警告:zone属性是pytz接口特有的;请迁移到新的时区提供者。
  • 核心需求:基于本地时间筛选当日且不早于2小时前的数据,代码需适配不同时区(跨地区出差场景)。
  • 现有代码问题:依赖pytz专属zone属性,且日期时间处理效率较低。

解决方案

1. 替换时区获取方式(消除警告核心)

Python 3.9+推荐使用标准库zoneinfo配合tzlocal获取本地时区,完全避开pytz的专属属性:

from datetime import datetime, timedelta
from tzlocal import get_localzone
import pandas as pd

# 获取兼容标准库的本地时区对象,无需依赖pytz
local_tz = get_localzone()

若使用Python 3.8及以下版本,先安装兼容库:

pip install backports.zoneinfo

再导入替代标准库:

from backports.zoneinfo import ZoneInfo

2. 优化日期时间转换与筛选逻辑

原代码逐行处理效率低,且重复计算当前时间,优化后更简洁高效:

# 1. 批量合并DATA和HORA列,直接转为带本地时区的datetime
df['DATA_HORA'] = pd.to_datetime(df['DATA'] + ' ' + df['HORA'], format='%d/%m/%Y %H:%M').dt.tz_localize(local_tz)

# 2. 一次性计算筛选所需的时间阈值
now_local = datetime.now(local_tz)
two_hours_ago = now_local - timedelta(hours=2)
today_date = now_local.date()

# 3. 筛选符合条件的数据
df_today = df[
    (df['DATA_HORA'].dt.date == today_date) &
    (df['DATA_HORA'] >= two_hours_ago)
]

关键说明

  • 用pd.to_datetime批量处理日期时间,比apply+strptime效率提升数倍。
  • 直接使用tzlocal返回的时区对象,彻底避免访问pytz专属的zone属性,消除警告。
  • 提前计算阈值变量,避免重复调用datetime.now(),减少不必要的计算开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46