将UTC转换为当地时间

时间:2015-08-12 20:31:44

标签: python-2.7 pandas

我有一个相当大的数据集,它有UTC时间戳。我需要将UTC转换为本地(中央)时区。我试过我的google-fu,但没有用。

数据框如下。

STID UTCTIME TRES  VRIR  RETY  REWT WEDN  DELP  WDIR  DERT RTAX  GAIN  DEVD
0  ARFW  2012-01-01T00:00  28.47  65  -999  -999  41  41  289  12  20  0  0
1  ARFW  2012-01-01T00:30  28.55  62  -999  -999  32  33  359  23  31  0  0
2  ARFW  2012-01-01T01:00  28.59  60  -999  -999  29  30  345  19  26  0  0
3  ARFW  2012-01-01T01:30  28.63  60  -999  -999  24  25  339  20  27  0  0
4  ARFW  2012-01-01T02:00  28.66  58  -999  -999  22  25  335  24  30  0  0

#Define time as UTC
data_df['UTCTIME'] = pd.to_datetime(data_df['UTCTIME'], utc= True)



data_df.dtypes
STID               object
UTCTIME    datetime64[ns]
TRES              float64
.
.
.
GAIN              float64
DEVD                int64
dtype: object

这是我尝试使用的代码:

import pytz, datetime
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M'
CSTM= pytz.timezone('US/Central')
local = pytz.timezone('US/Central')
dt = datetime.datetime.strptime(data_df['UTCTIME'], fmt)
CSTM_dt = CSTM.localize(dt)

和错误:

    ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-f10301993777> in <module>()
      4 CSTM = pytz.timezone('US/Central')
      5 local = pytz.timezone('US/Central')
----> 6 dt = datetime.datetime.strptime(data_df['UTCTIME'], fmt)
      7 CSTM = CSTM.localize(dt)

TypeError: must be string, not Series

此外,还有重复的UTCTIME条目...我无法理解索引......我相信索引可能是这里的一个问题......我不确定这里缺少什么。

1 个答案:

答案 0 :(得分:0)

strptime行的代码中,您不使用数据框中的实际日期字符串,而是使用文字字符串&#34; UTCTIME&#34;。

from_zone = tz.gettz('UTCTIME')
to_zone = tz.tzlocal()
utc = datetime.strptime('UTCTIME', '%Y-%m-%dT%H:%M')  # <====== STRING
utc = utc.replace(tzinfo = from_zone)
central = utc.astimezone(to_zone)

如果要在数据帧上使用它,则需要循环遍历UTCTIME列或创建执行转换的辅助函数并使用DataFrame.column.apply(helperfunc)方法。

要仅测试代码,请将'UTCTIME'字符串替换为实际日期字符串,或使用带字符串的变量。