如何将 pandas 日期时间列从 UTC 转换为 EST

Cau*_*der 2 python time timezone pandas

还有一个十一年前就有类似标题的问题。

我有一个 pandas 数据框,其中包含一列 datetime.time 值。

val    time
a      12:30:01.323
b      12:48:04.583
c      14:38:29.162
Run Code Online (Sandbox Code Playgroud)

我想将时间列从 UTC 转换为 EST。

我尝试这样做dataframe.tz_localize('utc').tz_convert('US/Eastern'),但它给了我以下错误:RangeIndex Object has no attribute tz_localize

Hal*_*Ali 5

to_datetime接受一个参数utc (bool),如果为 true,则将时间戳强制为 utc。

to_datetime返回 a DateTimeIndex,它有一个 method tz_convert。此方法会将 tz 感知时间戳从一种时区转换为另一种时区。

因此,这个变换可以简明地写成

df = pd.DataFrame(
       [['a', '12:30:01.323'],
        ['b', '12:48:04.583'],
        ['c', '14:38:29.162']],
       columns=['val', 'time']
)
df['time'] = pd.to_datetime(df.time, utc=True, format='%H:%M:%S.%f') 
# convert string to timezone aware field ^^^
df['time'] = df.time.dt.tz_convert('EST').dt.time
# convert timezone, discarding the date part ^^^
Run Code Online (Sandbox Code Playgroud)

这会产生以下数据框:

  val             time
0   a  07:30:01.323000
1   b  07:48:04.583000
2   c  09:38:29.162000
Run Code Online (Sandbox Code Playgroud)

这也可以是 1-liner,如下所示:

  val             time
0   a  07:30:01.323000
1   b  07:48:04.583000
2   c  09:38:29.162000
Run Code Online (Sandbox Code Playgroud)