我想把pandas python中本地化的datetime列截短/四舍五入到一小时。例如,如果我有2017-10-15 15:03:25+02:00,我希望获得2017-10-15 15 15:00:00+02:00。注意,我想保留时区信息。
我试过的第一件事是:DF['dtColumn'].dt.floor('H')
这种方法可以将时区信息截短到小时并保留时区信息,但问题是在夏时制到来时出现的,例如在2017年10月29日。给出以下代码:
^{pr2}$
它会产生给定的错误:
^{3}$
这个错误建议使用“歧义”参数,在出现歧义的情况下,有一个预定义的决定要做。但在我的数据帧中,我不会说有这样一个模糊性,因为我有时区信息,我仍然想要它在四舍五入后。我宁愿避免模棱两可。在
我也找到了解决办法:df.loc[:, 1].values.astype('
除复杂时区外,此方法通常有效。例如,尼泊尔的时区(亚洲/加德满都)是GMT+5:45。同样,我想做的是将本地时区中的datetimes截短到小时,在尝试了上面的代码之后,我观察到它将转换为utc,然后进行截断,因此当它返回到本地化的datetime时,我没有将其分组到精确的小时数中,而是将其分组到每个小时:45。在
对于代码:dt1 = datetime.datetime(2017, 10, 29, 0, 1)
dt2 = datetime.datetime(2017, 10, 29, 1, 1)
df = pd.DataFrame([('whatever', dt1), ('whatever', dt2)])
df[1] = df[1].dt.tz_localize('Asia/Katmandu')
df[2] = df.loc[:, 1].values.astype('
df[2].dt.tz_localize('UTC').dt.tz_convert('Asia/Katmandu')
我们得到以下结果:0 2017-10-28 23:45:00+05:45
1 2017-10-29 00:45:00+05:45
Name: 2, dtype: datetime64[ns, Asia/Katmandu]
这证明了我问题的答案不是将日期时间转换为“utc”或时间戳,而是构造它们并将它们转换回本地化的。在
python的本地库有一个replace方法,可以替换0的分钟和秒信息,但我在pandas中没有找到类似的datetime列。我想找到一个不同的解决方案来逐行迭代,因为我的数据帧相当大。
对于如何根据这个限制将pandas中的datetime列截短到小时有什么想法吗?在