【问题标题】:Pandas: Adding TimeZone offset to the timestamp after using tz_convertPandas:使用 tz_convert 后将 TimeZone 偏移量添加到时间戳
【发布时间】:2019-08-31 01:27:10
【问题描述】:

我有以下数据框,有一些偏移时间。

      feed_id                created_at
7191  1009408 2019-03-10 01:55:35-05:00
7192  1009408 2019-03-10 01:56:35-05:00
7193  1009408 2019-03-10 01:57:36-05:00
7194  1009408 2019-03-10 01:58:38-05:00
7195  1009408 2019-03-10 01:59:38-05:00
7196  1009408 2019-03-10 03:00:39-04:00
7197  1009408 2019-03-10 03:01:40-04:00
7198  1009408 2019-03-10 03:02:41-04:00
7199  1009408 2019-03-10 03:03:42-04:00

我是通过使用:

mydf['created_at']=mydf['created_at'].dt.tz_localize('UTC').dt.tz_convert('America/Montreal')

我希望将偏移时间添加到时间戳中,如果日期看起来像 2019-03-10 01:55:35-05:00,我希望它看起来像 2019-03-09 20:55: 35.

我在 this post 上看到了一个建议,该建议对我有帮助,但添加的偏移量是恒定的,我想在此练习中考虑 DST。

有没有办法获得考虑 DST 的“时区感知”时间增量或偏移量?

或者有没有更简单的方法来实现这一点?

【问题讨论】:

    标签: pandas datetime dataframe parsing dst


    【解决方案1】:

    我遇到了同样的问题并找到了答案here。最后只需要.dt.tz_localize(None)

    mydf['created_at'] = (mydf['created_at'].dt.tz_localize('UTC')
                                            .dt.tz_convert('America/Montreal')
                                            .dt.tz_localize(None))
    

    【讨论】:

      【解决方案2】:

      这是一种方法,策略是剖析 created_at 中的 Datetime.datetime 对象并重组。可能有更好的方法,尤其是不遵循tzoffset._offset 的方法。

      import pandas as pd
      from pandas.compat import StringIO
      
      csvdata = StringIO("""id,feed_id,created_at
      7191,1009408,2019-03-10 01:55:35-05:00
      7192,1009408,2019-03-10 01:56:35-05:00
      7193,1009408,2019-03-10 01:57:36-05:00
      7194,1009408,2019-03-10 01:58:38-05:00
      7195,1009408,2019-03-10 01:59:38-05:00
      7196,1009408,2019-03-10 03:00:39-04:00
      7197,1009408,2019-03-10 03:01:40-04:00
      7198,1009408,2019-03-10 03:02:41-04:00
      7199,1009408,2019-03-10 03:03:42-04:00""")
      
      df = pd.read_csv(csvdata, sep=",", index_col="id", parse_dates=True, infer_datetime_format=True)
      df['created_at'] = pd.to_datetime(df['created_at'])
      df['offset'] = df['created_at'].apply(lambda x: x.tzinfo)
      df['naive'] = df['created_at'].apply(lambda x: x.replace(tzinfo=None))
      # tzoffset._offset is a timedelta
      df['naive and offset'] = df['naive'] + df['offset'].apply(lambda x: x._offset)
      print(df)
      

      【讨论】:

        猜你喜欢
        • 2018-09-09
        • 1970-01-01
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-29
        • 1970-01-01
        相关资源
        最近更新 更多