【问题标题】:specify the time zone for pandas to_datetime function指定 pandas to_datetime 函数的时区
【发布时间】: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


【解决方案1】:

通过更改日期(删除尾随的“Z”),您可以这样做:

df = pd.DataFrame([])
theseAreCentralTime = ['2015-04-24T23:48:28','2015-04-24T23:40:59','2015-04-24T23:48:28']
df['time'] = theseAreCentralTime
df['time'] = pd.to_datetime(df['time'])
print(df['time'].dt.tz_localize(tz='US/Central'))

哪个会返回:

0   2015-04-24 23:48:28-05:00
1   2015-04-24 23:40:59-05:00
2   2015-04-24 23:48:28-05:00
Name: time, dtype: datetime64[ns, US/Central]

【讨论】:

  • 顺便说一句。您不必预先删除 Z,您可以使用 to_datetime 使用合适的格式字符串进行解析,该字符串末尾包含文字“Z”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2020-04-17
  • 1970-01-01
  • 2018-04-22
  • 2016-08-19
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多