我试图通过TimedeltaIndex划分一个pandas(0.22.0)Timedelta来获得一个小数值的Float64Index。例如:
>>> td_index = pd.TimedeltaIndex(['1 days', '2 days', '3 days'])
>>> td_index
TimedeltaIndex(['1 days', '2 days', '3 days'], dtype='timedelta64[ns]', freq=None)
>>> td = pd.Timedelta('1D')
>>> td
Timedelta('1 days 00:00:00')
>>> td_index / td # expected, like division
Float64Index([1.0, 2.0, 3.0], dtype='float64')
>>> td / td_index # unexpected, why the same as above?
Float64Index([1.0, 2.0, 3.0], dtype='float64')
>>> td.total_seconds() / td_index.total_seconds() # this works in a pinch
Float64Index([1.0, 0.5, 0.3333333333333333], dtype='float64'
似乎这些前者,即分母中具有Timedelta的那个,可以被认为是"frequency conversion",但我不确定为什么将指数放在分母中会有相同的行为,尤其是当这种行为与其他索引所表现出的不同时。例如,这似乎不适用于直接使用Float64Index:
>>> pd.Float64Index([1, 2, 3]) / 1)
Float64Index([1.0, 2.0, 3.0], dtype='float64')
>>> 1 / pd.Float64Index([1, 2, 3]))
Float64Index([1.0, 0.5, 0.3333333333333333], dtype='float64') # the behavior I want
.total_seconds()
)?答案 0 :(得分:1)
这只能完全回答你的第二个问题。
为什么pandas Timedeltas和TimedeltaIndexes就像这样?
您可以查看source code,特别是__truediv__
,您可以在其中查看各种类型的除法逻辑。
有没有办法用TimedeltaIndex和Timedelta实现浮点式划分?
没有。从源代码来看,所有比较,在后台,涉及在应用除法之前转换或检索浮点数。这是有道理的,因为datetime
对象是建立在数字数据上的。
您的timedelta
个对象存储在ns内部。例如,td.delta
或td.value
都返回86400000000000。
当然,你没有理由需要转换为秒。 td.days / td_index.days
也可以。