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

如何将Pandas DataFrame中所有UTC时区Timestamp列转换为指定时区?

如何更简洁地将Pandas DataFrame中的多列UTC时间转换为EST?

假设我们有一个包含多列UTC时区datetime类型数据的Pandas DataFrame,示例代码如下:

import pandas as pd
df = pd.DataFrame({
    'id': {0: 12394, 1: 12393, 2: 12392, 3: 12391, 4: 12390},
    'created_timestamp': {
        0: pd.Timestamp('2020-12-30 02:13:19.921394'),
        1: pd.Timestamp('2020-12-30 02:10:36.176147'),
        2: pd.Timestamp('2020-12-30 02:05:56.261883'),
        3: pd.Timestamp('2020-12-30 02:02:06.483371'),
        4: pd.Timestamp('2020-12-30 02:01:10.212199')
    },
    'City': {0: 'Boston', 1: 'New York', 2: 'Albany', 3: 'Buffalo', 4: 'Detroit'},
    'updated_timestamp': {
        0: pd.Timestamp('2020-12-30 02:13:19.921394'),
        1: pd.Timestamp('2020-12-30 02:10:36.176147'),
        2: pd.Timestamp('2020-12-30 02:05:56.261883'),
        3: pd.Timestamp('2020-12-30 02:02:06.483371'),
        4: pd.Timestamp('2020-12-30 02:01:10.212199')
    }
})

我目前尝试的实现方式是:

timecols = df.select_dtypes(include=["datetime64[ns]"])
for col in timecols:
    df[col] = df[col] \
        .dt.tz_localize("UTC") \
        .dt.tz_convert("EST")

请问有没有更简洁、更符合Python风格的实现方法?


当然有!这里有几种更简洁且符合Pythonic风格的实现方式:

方法1:用apply批量处理时间列

可以直接对选中的所有时间列应用转换逻辑,避免显式循环:

# 先筛选出所有datetime类型的列名
time_cols = df.select_dtypes(include=["datetime64[ns]"]).columns
# 批量转换时区
df[time_cols] = df[time_cols].apply(lambda col: col.dt.tz_localize("UTC").dt.tz_convert("EST"))

这种写法把循环逻辑封装在apply里,代码更紧凑,可读性也不错。

方法2:用assign创建新DataFrame(不修改原数据)

如果你希望保留原DataFrame不变,生成一个新的处理后的数据,可以结合assign和字典推导式:

time_cols = df.select_dtypes(include=["datetime64[ns]"]).columns
new_df = df.assign(**{col: df[col].dt.tz_localize("UTC").dt.tz_convert("EST") for col in time_cols})

这种方式遵循函数式编程的“不可变性”原则,适合不需要修改原数据的场景。

额外小贴士:时区的最佳实践

注意EST是固定偏移的时区(UTC-5),不会自动处理夏令时切换。如果你的数据需要适配美国东部时间的夏令时(EDT/EST自动切换),建议使用IANA标准时区标识符America/New_York,Pandas会自动处理时区的夏令时转换:

df[time_cols] = df[time_cols].apply(lambda col: col.dt.tz_localize("UTC").dt.tz_convert("America/New_York"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:56:33