我有一个数据框,其中的time_zone和日期在不同的列中。我想获取与time_zone相对应的本地时间。
我的数据框如下:
df = pd.DataFrame({'CREATED_DT':['2017-01-01 20:24:21','2017-01-01 21:10:54','2017-01-02 11:48:12','2017-01-02 19:30:53','2017-01-02 21:06:55'],
'Time_Zone':['EST','EST','CET','EST','CST']})
df['CREATED_DT'] = pd.to_datetime(df['CREATED_DT']).dt.tz_localize('UTC')
我已将创建的日期转换为UTC,并且time_zone在另一列中。我想获取与时区相对应的当地时间。所以它的代码是:
df['Local_Time'] = df.apply(lambda x: x['CREATED_DT'].tz_convert(x['timezone']), axis = 1)
在time_zone为EST,CET的情况下,它可以正常工作,但会给CST错误,提示:
UnknownTimeZoneError: ('CST', u'occurred at index 4')
除了硬编码之外,我不确定是否有其他方法可以解决此问题……请建议是否还有其他可以使用的库或函数?
答案 0 :(得分:1)
将CST作为时区引发错误的原因是,它可以引用3个不同的时区:中部标准时间,即北美的中部时区(UTC -0600),中国标准时间(UTC +0800)和古巴标准时间(UTC -0400)。我假设您要使用中央标准时间。
使用pytz library可以轻松收敛时间,它拥有一个不断更新的大多数时区数据库。
在您的情况下,将日期转换为时区的行可以更改为以下行:
import pytz
df['Local_Time'] = df.apply(lambda x: pytz.timezone("US/Central" if x['Time_Zone'] == 'CST' else x['Time_Zone']).normalize(x['CREATED_DT']), axis = 1)
(旁注:以pytz为单位,中部标准时间为'US/Central'
,中国标准时间为'Asia/Shanghai'
,古巴标准时间为'Cuba'
。对于其他时间,您可以选中{{3 }}或this stackoverflow question)
如果此时将其设置为函数而不是lambda,也可能使代码更具可读性。