我在pandas.DatetimeIndex的回合方法中遇到了一种奇怪的,非常意外的行为:
import pandas as pd
import datetime as dt
t1 = pd.DatetimeIndex([dt.datetime(2013,12,5,1,30,0),
dt.datetime(2013,12,5,2,30,0),
dt.datetime(2013,12,5,3,30,0),
dt.datetime(2013,12,5,4,30,0)])
print(t1)
给予:
DatetimeIndex(['2013-12-05 01:30:00', '2013-12-05 02:30:00',
'2013-12-05 03:30:00', '2013-12-05 04:30:00'],
dtype='datetime64[ns]', freq=None)
到目前为止,很好。现在我想四舍五入到最近的整整一个小时。我不在乎是选择下一个小时还是前一个小时。但是我需要一致的行为。
t2 = t1.round('H')
print(t2)
令人惊讶的是:
DatetimeIndex(['2013-12-05 02:00:00', '2013-12-05 02:00:00',
'2013-12-05 04:00:00', '2013-12-05 04:00:00'],
dtype='datetime64[ns]', freq=None)
[条目1和3被四舍五入,而条目2和4被四舍五入。这是应有的行为吗?我想引擎盖下正在发生一些数字化的事情。但这确实令人不安。在我的情况下,时间分辨率限制为分钟。因此,我可以每次加(或减)1s并获得所需的结果。但这不是正确的方法。
not如何以numpy处理舍入。在numpy.around
中,强调我自己。
对于恰好介于四舍五入十进制值之间的值,NumPy 四舍五入。因此1.5和2.5四舍五入为2.0,-0.5 和0.5舍入到0.0,等等。考虑您的时间以小时为单位,这将是预期的行为:至最接近的偶数值
numpy.around
([np.around([1.5, 2.5, 3.5, 4.5]) #array([2., 2., 4., 4.])
定义相同的行为,使用pandas
进行四舍五入)
那么,如何用频率将日期时间四舍五入?深入为
RoundTo.NEAREST_HALF_EVEN
方法,而我们想要的舍入为RoundTo.NEAREST_HALF_EVEN
。我们需要处理RoundTo
的复杂性,但是熊猫已经可以处理了。还导入RoundTo
方法。
RoundTo.NEAREST_HALF_PLUS_INFTY