我试图在 NaT 面前获取包含 datetime64 数据的几个 Pandas Series 对象的最小值和最大值。如果 dtype 是 float64, np.minimum 和 np.maximum 会按照我想要的方式工作。也就是说,一旦比较中的任何元素为 NaN,NaN 将是该比较的结果。例如:>>> s10 0.01 1.82 3.63 5.4dtype: float64>>> s20 10.01 17.02 NaN3 14.0dtype: float64>>> np.maximum(s1, s2)0 10.01 17.02 NaN3 14.0dtype: float64>>> np.minimum(s1, s2)0 0.01 1.82 NaN3 5.4dtype: float64如果 s1 和 s2 是 datetime64 对象,则这不起作用:>>> s10 2199-12-311 2199-12-312 2199-12-313 2199-12-31dtype: datetime64[ns]>>> s20 NaT1 2018-10-30 2 NaT3 NaTdtype: datetime64[ns]>>> np.maximum(s1, s2)0 2199-12-311 2199-12-312 2199-12-313 2199-12-31dtype: datetime64[ns]>>> np.minimum(s1, s2)0 2199-12-311 2018-10-302 2199-12-313 2199-12-31dtype: datetime64[ns]无论是计算最小值还是最大值,我都希望索引 0、2 和 3 显示为 NaT。(我意识到 numpy 的函数可能不是最佳选择,但我没有成功找到合适的 Pandas 类似物。)在做了一些阅读之后,我开始意识到 NaT 只是近似 NaN,后者具有适当的浮点表示。进一步阅读表明没有简单的方法可以让 NaT“污染”这些比较。让 NaT 在最小/最大比较中传播的正确方法是什么,就像 NaN 在浮点上下文中所做的那样?也许有与 numpy.{maximum,minimum} 等价的 Pandas 是 NaT 感知的?
3 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
不确定这是最好的方法,但是如果您将 s1 和 s2 的类型更改为objectwith astype,然后使用np.minimumandnp.maximum工作,您仍然会得到一系列datetime64[ns],例如:
print (np.maximum(s1.astype(object), s2.astype(object)))
0 NaT
1 2199-12-31
2 NaT
3 NaT
Name: 1, dtype: datetime64[ns]
添加回答
举报
0/150
提交
取消