【发布时间】:2020-12-11 00:58:08
【问题描述】:
当我对数据使用 pd.to_datetime 函数时,如下所示,我得到了我在 UTC 中的时区感知系列。我知道 tz_convert 函数,但我认为它不适合我的目的。
我所拥有的时间是在美国中部时区。如果我没有指定这个,那么我的 21:00 CDT 被假定为 21:00 UTC,而 tz_convert 会错误地给我 16:00-5:00。也许我只是对这种时间表示感到困惑,但据我了解,这会将 21:00 CDT 错误地表示为 16:00 CDT。
如果我可以在转换时间列时指定要使用的时区,我认为这不是问题。或者,如果有简单的方法来设置时区而不进行转换。下面是一个例子:
df = pd.DataFrame([])
theseAreCentralTime = ['2015-04-24T23:48:28Z','2015-04-24T23:40:59Z','2015-04-24T23:48:28Z']
df['time'] = theseAreCentralTime
df['time'] = pd.to_datetime(df['time'])
print(df['time'].dt.tz)
print(df['time'])
df['time'] = df['time'].dt.tz_convert('US/Central')
print(df['time'].dt.tz)
print(df['time'])
这个输出是:
UTC
0 2015-04-24 23:48:28+00:00
1 2015-04-24 23:40:59+00:00
2 2015-04-24 23:48:28+00:00
Name: time, dtype: datetime64[ns, UTC]
US/Central
0 2015-04-24 18:48:28-05:00
1 2015-04-24 18:40:59-05:00
2 2015-04-24 18:48:28-05:00
Name: time, dtype: datetime64[ns, US/Central]
我希望看到的时代是:
23:48:28-05:00
23:40:59-05:00
23:48:28-05:00
etc
提前感谢您的帮助
【问题讨论】:
-
日期格式的问题是最后一个“Z”表示日期是UTC。
-
作为一个小技巧,我添加了
df['time'] = df['time'] + datetime.timedelta(hours = 5)这将时间倒退,但必须有更好的方法适用于任何给定的 tz -
支持@JulienRoullé:您的输入格式为RFC3339 - Z 表示UTC。如果这实际上是美国/中部,那么您的输入是错误的(格式错误)。
标签: python pandas datetime timezone