oracle 截取时间至小时,如何在pandas中构造/取整到小时的本地化日期时间列

本文探讨了如何在Pandas中保持时区信息的同时,避免夏时制带来的歧义,实现本地化datetime列的四舍五入到小时。通过实例展示了使用tz_localize和astype解决时区问题的方法,以及为何直接转换为UTC再转换回本地可能导致精度损失。作者寻求一种针对大型数据帧逐行迭代的高效解决方案。
摘要由CSDN通过智能技术生成

我想把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列截短到小时有什么想法吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值