我有以下数据帧,有一些偏移时间。
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?
或者有更简单的方法来实现这一目标吗?
这是一种方法,策略是在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)