代码之家  ›  专栏  ›  技术社区  ›  Jane Sully

如何转换Pandas中datetime列的时区?

  •  0
  • Jane Sully  · 技术社区  · 6 年前

    我有一个列(非索引列),其中包含日期时间。例如,前五个条目如下所示:

    [Timestamp('2018-11-15 19:57:55'),
     Timestamp('2018-11-15 19:59:46'),
     Timestamp('2018-11-15 20:00:59'),
     Timestamp('2018-11-15 20:01:41'),
     Timestamp('2018-11-15 20:01:54')]
    

    我想将条目从UTC转换为太平洋时区。假设该列被调用 times 我目前正在做以下工作:

    times.dt.tz_localize('GMT').dt.tz_convert('America/Los_Angeles')

    虽然这成功地将列从UTC转换为PST,但输出中有我不想要的无关组件。如下所示:

    [Timestamp('2018-11-15 11:57:55-0800', tz='America/Los_Angeles'),
     Timestamp('2018-11-15 11:59:46-0800', tz='America/Los_Angeles'),
     Timestamp('2018-11-15 12:00:59-0800', tz='America/Los_Angeles'),
     Timestamp('2018-11-15 12:01:41-0800', tz='America/Los_Angeles'),
     Timestamp('2018-11-15 12:01:54-0800', tz='America/Los_Angeles')]
    

    如何删除或忽略 -0800 从时间戳上看?谢谢

    1 回复  |  直到 6 年前
        1
  •  17
  •   Neroksi    6 年前

    只需添加最后一步 .tz_localize(None)

    import pandas as pd
    d = pd.Series(['2018-11-15 19:57:55', '2018-11-15 19:59:46'])
    d = pd.to_datetime(d)
    d
    0   2018-11-15 19:57:55
    1   2018-11-15 19:59:46
    dtype: datetime64[ns]
    
    d_pacific_tz_aware = d.dt.tz_localize("GMT").dt.tz_convert('America/Los_Angeles')
    d_pacific_tz_aware
    0   2018-11-15 11:57:55-08:00
    1   2018-11-15 11:59:46-08:00
    dtype: datetime64[ns, America/Los_Angeles]
    
    
    d_pacific_tz_naive = d.dt.tz_localize("GMT").dt.tz_convert('America/Los_Angeles').dt.tz_localize(None)
    d_pacific_tz_naive
    0   2018-11-15 11:57:55
    1   2018-11-15 11:59:46
    dtype: datetime64[ns]