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

如何在Python Pandas DataFrame中高效将本地时间转换为UTC时间?

高效将DataFrame本地时间转换为UTC并聚合月度数据

步骤说明与代码实现

1. 预处理特殊小时值

数据里的hour=24属于非标准时间格式,需要转换为次日的hour=0,避免后续时间解析出错:

import pandas as pd
import pytz
from datetime import timedelta

# 构造示例数据
data = {
    'date': ['7/31/2010 0:00:00', '6/14/2010 0:00:00', '6/14/2010 0:00:00', '5/30/2010 0:00:00', '5/30/2010 0:00:00'],
    'timezone': ['EST', 'PST', 'PST', 'EDT', 'EDT'],
    'hour': [1, 3, 4, 23, 24]
}
df = pd.DataFrame(data)

# 处理hour=24的情况
mask = df['hour'] == 24
df.loc[mask, 'date'] = pd.to_datetime(df.loc[mask, 'date']) + timedelta(days=1)
df.loc[mask, 'hour'] = 0

2. 生成带时区的本地时间

将日期字符串与小时数合并,再为其绑定对应时区信息(利用pytz自动处理夏令时规则):

# 合并日期与小时,生成完整本地时间
df['local_datetime'] = pd.to_datetime(df['date']) + pd.to_timedelta(df['hour'], unit='h')

# 映射时区代码到pytz标准时区对象
tz_map = {
    'EST': pytz.timezone('America/New_York'),
    'EDT': pytz.timezone('America/New_York'),
    'PST': pytz.timezone('America/Los_Angeles'),
    'PDT': pytz.timezone('America/Los_Angeles')
}

# 为本地时间添加时区信息,自动识别夏令时状态
df['local_datetime'] = df.apply(
    lambda row: tz_map[row['timezone']].localize(row['local_datetime'], is_dst=None),
    axis=1
)

3. 转换为UTC时间

通过tz_convert方法直接将带时区的本地时间切换为UTC时间:

df['utc_datetime'] = df['local_datetime'].dt.tz_convert('UTC')

4. 月度数据聚合

按UTC时间的月份分组,可根据业务需求选择聚合方式(以下以统计每月记录数为例):

# 按月度聚合,输出月份与对应记录数量
monthly_agg = df.groupby(df['utc_datetime'].dt.to_period('M')).size().reset_index(name='record_count')
print(monthly_agg)

关键注意点

  • 避免手动计算时差:夏令时的切换规则复杂,直接使用pytz的时区对象能自动处理,减少出错概率。
  • 时区代码映射:像EST/EDT同属美国东部时区,只需映射到同一个America/New_York时区即可,localize方法会自动识别夏令时状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:15:35