如何将 pandas 日期时间列从 UTC 转换为 EST
How to convert a pandas datetime column from UTC to EST
还有一个 question 十一岁,头衔相似。
我有一个 pandas 数据框,其中有一列 datetime.time 个值。
val time
a 12:30:01.323
b 12:48:04.583
c 14:38:29.162
我想将时间列从 UTC 转换为 EST。
我尝试执行 dataframe.tz_localize('utc').tz_convert('US/Eastern')
但它给了我以下错误:RangeIndex Object has no attribute tz_localize
tz_localize
和 tz_convert
处理 DataFrame 的索引。所以你可以这样做:
- 将“时间”转换为时间戳格式
- 将“时间”列设置为索引并使用转换函数
reset_index()
- 只保留时间
尝试:
dataframe["time"] = pd.to_datetime(dataframe["time"],format="%H:%M:%S.%f")
output = (dataframe.set_index("time")
.tz_localize("utc")
.tz_convert("US/Eastern")
.reset_index()
)
output["time"] = output["time"].dt.time
>>> output
time val
0 15:13:12.349211 a
1 15:13:13.435233 b
2 15:13:14.345233 c
to_datetime
接受一个参数 utc (bool)
,当它为真时,将时间戳强制转换为 utc.
to_datetime
returns一个DateTimeIndex
,其中有一个方法tz_convert
。此方法会将 tz-aware 时间戳从一个 timezeone 转换为另一个。
所以,这个转换可以简明地写成
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 ^^^
这会产生以下数据帧:
val time
0 a 07:30:01.323000
1 b 07:48:04.583000
2 c 09:38:29.162000
这也可以是 1-liner,如下所示:
pd.to_datetime(df.time, utc=True, format='%H:%M:%S.%f').dt.tz_convert('EST').dt.time
list_temp = []
for row in df['time_UTC']:
list_temp.append(Timestamp(row, tz = 'UTC').tz_convert('US/Eastern'))
df['time_EST'] = list_temp
还有一个 question 十一岁,头衔相似。
我有一个 pandas 数据框,其中有一列 datetime.time 个值。
val time
a 12:30:01.323
b 12:48:04.583
c 14:38:29.162
我想将时间列从 UTC 转换为 EST。
我尝试执行 dataframe.tz_localize('utc').tz_convert('US/Eastern')
但它给了我以下错误:RangeIndex Object has no attribute tz_localize
tz_localize
和 tz_convert
处理 DataFrame 的索引。所以你可以这样做:
- 将“时间”转换为时间戳格式
- 将“时间”列设置为索引并使用转换函数
reset_index()
- 只保留时间
尝试:
dataframe["time"] = pd.to_datetime(dataframe["time"],format="%H:%M:%S.%f")
output = (dataframe.set_index("time")
.tz_localize("utc")
.tz_convert("US/Eastern")
.reset_index()
)
output["time"] = output["time"].dt.time
>>> output
time val
0 15:13:12.349211 a
1 15:13:13.435233 b
2 15:13:14.345233 c
to_datetime
接受一个参数 utc (bool)
,当它为真时,将时间戳强制转换为 utc.
to_datetime
returns一个DateTimeIndex
,其中有一个方法tz_convert
。此方法会将 tz-aware 时间戳从一个 timezeone 转换为另一个。
所以,这个转换可以简明地写成
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 ^^^
这会产生以下数据帧:
val time
0 a 07:30:01.323000
1 b 07:48:04.583000
2 c 09:38:29.162000
这也可以是 1-liner,如下所示:
pd.to_datetime(df.time, utc=True, format='%H:%M:%S.%f').dt.tz_convert('EST').dt.time
list_temp = []
for row in df['time_UTC']:
list_temp.append(Timestamp(row, tz = 'UTC').tz_convert('US/Eastern'))
df['time_EST'] = list_temp