将csv时间戳从UTC转换为夏威夷时区

时间:2018-09-11 15:21:25

标签: python csv datetime python-dateutil

我有一个csv数据,已将时间戳记为UTC,但需要夏威夷的本地时间(UTC-10)。理想情况下,我会在csv中添加一个新列,其中包含夏威夷时间和UTC时间,然后是数据。

Here is the csv file format,第一列带有日期时间。该格式有点奇怪,因为它具有正常的“年-月-日小时/分钟/秒”,但是后面跟着“ UTC”,我认为这可能会导致我遇到问题。

我有一些简单的代码来提取时间列,将其分配给UTC时间(因为时间戳是未知时区),然后将其转换为UTC-10。

import pandas as pd
import os
from datetime import datetime
from dateutil import tz

# read the file in csv 
K = pd.read_csv("kona_python.csv")

# time series data selection
UTCtime = K.iloc[:,0] 

# access timezones:
utc_timezome = tz.gettz('UTC')
hawaii_timezone = tz.gettz('US/Hawaii')

# feeding in the csv column data
utc = UTCtime

# set the datetime object to the UTC timezone
utc = utc.replace(tzinfo = utc_timezome)

# convert time zone to Hawaii
hawaii = utc.astimezone(hawaii_timezone)

但是它可以与this error一起运行,而tzinfo则不会出现。我是否正确使用dateutil?还是有一个更简单的方法来做到这一点?任何帮助,不胜感激!

更新-CSV示例:

UTC timestamp   A   B   C   D   E   F
2018-07-20 22:22:06 UTC 1.27    21.64   1.11    0.37    22.31   0.33
2018-07-20 22:23:25 UTC 1.4 21.82   0.33    0.75    22.59   0.33
2018-07-20 22:24:45 UTC 2.09    20.31   0.93    1.55    21.05   0.4
2018-07-20 22:26:05 UTC 0.8 21.34   0.93    1.36    20.89   0.4
2018-07-20 22:27:24 UTC 0.4 19.93   0.93    1.37    22.58   0.24

1 个答案:

答案 0 :(得分:0)

上面的代码有两个问题(例如utc是一系列字符串,而不是时间戳,那么replace函数不能像在时区那样应用于一系列),请参见下文有效的代码:

import pandas as pd
import os
from datetime import datetime
from dateutil import tz

# read the file in csv 
K = pd.read_csv("a.csv")

# time series data selection
UTCtime = K.iloc[:,0] 

# access timezones:
hawaii_timezone = tz.gettz('US/Hawaii')

# convert the string to datime
utc = UTCtime.apply(lambda x : datetime.strptime(x,"%Y-%m-%d %H:%M:%S UTC"))

# convert time zone to Hawaii (first localize to utc)
hawaii = utc.apply(lambda x : x.tz_localize('utc').astimezone(hawaii_timezone))

print (hawaii)

此csv已测试代码:

col,col,col
2018-07-20 22:22:06 UTC,a,b