首页 > 解决方案 > pandas 中是否有一个函数可以转换以 CST 作为时区的时间戳?

问题描述

我有一个数据框,它在不同的列中有 time_zone 和 date。我想得到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')

我不确定除了硬编码之外是否有其他方法来处理这个问题......请建议是否有任何其他库或函数可以使用?

标签: pythonpandasscikit-learn

解决方案


CST 作为时区之所以会报错,是因为它可以引用 3 个不同的时区:中部标准时间,即北美的中部时区(UTC -0600)、中国标准时间(UTC +0800)和古巴标准时间( UTC -0400)。我假设您想使用中央标准时间。

收敛时间的一种简单方法是使用pytz 库,它有一个不断更新的大多数时区数据库。

在您的情况下,将日期转换为时区的行可以更改为以下行:

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'是在这一点上,它是一个函数而不是 lambda。'Asia/Shanghai''Cuba'


推荐阅读