首页 文章

Pandas数据框,包含时间戳和时区列

提问于
浏览
3

我有一个pandas数据帧,其中包含一列时间戳和一组时间戳所在的时区 . 将所有这些时间戳转换为UTC时间的最佳方法是什么?

csv中的示例数据:

0,2000-01-28 16:47:00,America/Chicago
1,2000-01-29 16:48:00,America/Chicago
2,2000-01-30 16:49:00,America/Los_Angeles
3,2000-01-31 16:50:00,America/Chicago
4,2000-01-01 16:50:00,America/New_York

2 回答

  • 1

    这可以通过一次转换一个tz来有效地完成(但由于我们有很多,groupby已经将它们分开了) . 这些是本地时间(在给定时区内的IOW),因此 tz_localize 使这些tz感知 . 然后,当我们将它们组合在一起时,它们会自动神奇地转换为UTC .

    请注意,这是在master / 0.17.0上,很快就会发布 . 溶解<0.17.0以下

    In [19]: df = read_csv(StringIO(data),header=None, names=['value','date','tz'])
    
    In [20]: df.dtypes
    Out[20]: 
    value     int64
    date     object
    tz       object
    dtype: object
    
    In [21]: df
    Out[21]: 
       value                 date                   tz
    0      0  2000-01-28 16:47:00      America/Chicago
    1      1  2000-01-29 16:48:00      America/Chicago
    2      2  2000-01-30 16:49:00  America/Los_Angeles
    3      3  2000-01-31 16:50:00      America/Chicago
    4      4  2000-01-01 16:50:00     America/New_York
    
    In [22]: df['utc'] = df.groupby('tz').date.apply(
                    lambda x: pd.to_datetime(x).dt.tz_localize(x.name))
    
    In [23]: df
    Out[23]: 
       value                 date                   tz                 utc
    0      0  2000-01-28 16:47:00      America/Chicago 2000-01-28 22:47:00
    1      1  2000-01-29 16:48:00      America/Chicago 2000-01-29 22:48:00
    2      2  2000-01-30 16:49:00  America/Los_Angeles 2000-01-31 00:49:00
    3      3  2000-01-31 16:50:00      America/Chicago 2000-01-31 22:50:00
    4      4  2000-01-01 16:50:00     America/New_York 2000-01-01 21:50:00
    
    In [24]: df.dtypes
    Out[24]: 
    value             int64
    date             object
    tz               object
    utc      datetime64[ns]
    dtype: object
    

    在<0.17.0,需要:

    df['utc'] = df['utc'].dt.tz_localize(None)
    

    转换为UTC

  • 3

    通常:组合2 csv时间列 during 导入(或之前) . 这可以通过一个小的lambda函数来完成 .

    要转换(解析)组合信息,存在多个选项 . 大多数都在这里或pandas-docs中描述 . 我个人喜欢 utils.parse 一个 .

相关问题