大熊猫中是否存在将CST转换为时区的时间戳的功能?

时间:2019-05-28 17:28:20

标签: python pandas scikit-learn

我有一个数据框,其中的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')

除了硬编码之外,我不确定是否有其他方法可以解决此问题……请建议是否还有其他可以使用的库或函数?

1 个答案:

答案 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,也可能使代码更具可读性。