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

问题描述 投票:0回答:1

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

      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的“时区感知”timedelta或offset?

或者有更简单的方法来实现这一目标吗?

pandas datetime dataframe parsing dst
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.