UTC 到给定国家/地区首字母的本地化时间



假设我有一列国家首字母缩写,将一列UTC时间转换为本地化时间的最佳方法是什么?

例如

UTC          Country  
----------   |  --------  
1480597215        FR
1480544735        RU

UTC          Country     Localized time (example)
----------   |  --------    ---------------
1480597215        FR       datetime.datetime(2016, 12, 2, 0, 0, 15, tzinfo  = FR)
1480544735        RU

我知道存在时区问题(例如,美国的不同地区位于不同的时区),但假设有一个近似的映射(例如,美国所有地区都遵循中部时间)

最好的方法是什么? pytz 图书馆需要实际时区(例如,"亚洲/马来西亚"),但我只有国家代码。

谢谢!:)

您可以使用矢量化to_datetime+tz_localize来表示UTC日期时间,然后使用矢量化apply转换为时区:

from pytz import country_timezones
df['date'] = pd.to_datetime(df['UTC'], unit='s').dt.tz_localize('UTC')
df['tz']=df.apply(lambda x: x['date'].tz_convert(country_timezones(x['Country'])[0]), axis=1)
print (df)
UTC Country                      date                         tz
0  1480597215      FR 2016-12-01 13:00:15+00:00  2016-12-01 14:00:15+01:00
1  1480544735      RU 2016-11-30 22:25:35+00:00  2016-12-01 00:25:35+02:00

使用notnull创建掩码,然后仅对Trues 的值应用解决方案:

df = pd.DataFrame({'UTC': [1480597215, 1480597215, 1480597215, 1480544735], 
'Country': ['', np.nan, 'FR', 'RU']})
print (df)
Country         UTC
0          1480597215
1     NaN  1480597215
2      FR  1480597215
3      RU  1480544735
df['UTC'] = pd.to_datetime(df['UTC'], unit='s', errors='coerce').dt.tz_localize('UTC')
mask = df['Country'].notnull() & (df['Country'] != '')
print (mask)
0    False
1    False
2     True
3     True
Name: Country, dtype: bool
df['tz'] = df[mask].apply(lambda x: x['UTC'].tz_convert(country_timezones(x['Country'])[0]), 
axis=1)
print (df)
Country                       UTC                         tz
0         2016-12-01 13:00:15+00:00                        NaN
1     NaN 2016-12-01 13:00:15+00:00                        NaN
2      FR 2016-12-01 13:00:15+00:00  2016-12-01 14:00:15+01:00
3      RU 2016-11-30 22:25:35+00:00  2016-12-01 00:25:35+02:00

您可以使用 pytz 的country_timezones:

import pytz
from datetime import datetime
timestamp = 1480597215
d = datetime.fromtimestamp(timestamp, pytz.timezone(pytz.country_timezones('fr')[0]))
print d

请记住,pytz.country_timezones返回与输入相关的可用时区列表。

相关内容

  • 没有找到相关文章

最新更新