熊猫:使用tz_convert后将TimeZone偏移量添加到时间戳

时间:2019-04-09 17:21:20

标签: pandas datetime dataframe parsing dst

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

      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的“时区感知”时间增量或偏移量?

还是有一种更简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

这是一种方法,该策略是解剖Datetime.datetime中的created_at个对象并重新构造。可能有更好的方法,尤其是没有遵循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)

答案 1 :(得分:0)

我遇到了同样的问题,并找到了答案here。您只需要在末尾.dt.tz_localize(None)

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