【问题标题】:Convert timezone of multiple columns in a pandas DataFrame according to a third column?根据第三列转换pandas DataFrame中多列的时区?
【发布时间】:2015-01-18 21:31:55
【问题描述】:

我有一个数据框,其中包含多列 UTC 时间戳和一列应转换为的时区。我将如何编写一个函数来映射它?

           created_at            ended_at             timezone
0 2014-11-19 16:11:45 2014-11-19 16:30:31     America/New_York
1 2014-11-19 18:37:47 2014-11-19 18:57:55     America/New_York
2 2014-11-19 18:59:21 2014-11-19 19:51:29  America/Los_Angeles
3 2014-11-19 19:47:35 2014-11-19 20:58:04     America/New_York
4 2014-11-19 20:29:46 2014-11-19 20:40:36     America/New_York
5 2014-11-19 22:23:42 2014-11-19 22:58:43  America/Los_Angeles
6 2014-11-20 16:31:24 2014-11-20 17:49:12     America/New_York

【问题讨论】:

    标签: python-2.7 pandas pytz python-datetime


    【解决方案1】:

    你可以这样做。但请记住,拥有一个单一时区的列会更有效。因此,您可能希望以不同的方式组织数据。

    In [16]: def conv(col, tzs):
       ....:     return [ d.tz_localize(tz) for d, tz in zip(col, tzs) ]
       ....: 
    
    In [17]: df
    Out[17]: 
                    date1               date2                   tz
    0 2014-11-19 16:11:45 2014-11-19 16:30:31     America/New_York
    1 2014-11-19 18:37:47 2014-11-19 18:57:55     America/New_York
    2 2014-11-19 18:59:21 2014-11-19 19:51:29  America/Los_Angeles
    3 2014-11-19 19:47:35 2014-11-19 20:58:04     America/New_York
    4 2014-11-19 20:29:46 2014-11-19 20:40:36     America/New_York
    5 2014-11-19 22:23:42 2014-11-19 22:58:43  America/Los_Angeles
    6 2014-11-20 16:31:24 2014-11-20 17:49:12     America/New_York
    
    In [18]: df['date1_tz'] = conv(df['date1'],df['tz'])
    
    In [19]: df['date2_tz'] = conv(df['date2'],df['tz'])
    
    In [20]: df
    Out[20]: 
                    date1               date2                   tz                   date1_tz                   date2_tz
    0 2014-11-19 16:11:45 2014-11-19 16:30:31     America/New_York  2014-11-19 16:11:45-05:00  2014-11-19 16:30:31-05:00
    1 2014-11-19 18:37:47 2014-11-19 18:57:55     America/New_York  2014-11-19 18:37:47-05:00  2014-11-19 18:57:55-05:00
    2 2014-11-19 18:59:21 2014-11-19 19:51:29  America/Los_Angeles  2014-11-19 18:59:21-08:00  2014-11-19 19:51:29-08:00
    3 2014-11-19 19:47:35 2014-11-19 20:58:04     America/New_York  2014-11-19 19:47:35-05:00  2014-11-19 20:58:04-05:00
    4 2014-11-19 20:29:46 2014-11-19 20:40:36     America/New_York  2014-11-19 20:29:46-05:00  2014-11-19 20:40:36-05:00
    5 2014-11-19 22:23:42 2014-11-19 22:58:43  America/Los_Angeles  2014-11-19 22:23:42-08:00  2014-11-19 22:58:43-08:00
    6 2014-11-20 16:31:24 2014-11-20 17:49:12     America/New_York  2014-11-20 16:31:24-05:00  2014-11-20 17:49:12-05:00
    

    【讨论】:

    • 关于正在创建的新列需要注意的一点是它们属于dtype('O'),而不是datetime64[ns]datetime64[ns] 的许多原生操作将不再按预期工作。正如@Jeff 所说,重新组织数据可能更有益。我个人使用date1_UTCdata1_localTZ 的组合,以便列可以保持为datetime64[ns] dtypes
    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2018-10-09
    • 1970-01-01
    • 2015-10-09
    • 2021-03-01
    • 2021-05-30
    相关资源
    最近更新 更多