为了账号安全,请及时绑定邮箱和手机立即绑定

让 Pandas NaT 像 NaN 一样传播

让 Pandas NaT 像 NaN 一样传播

开满天机 2021-08-05 18:08:07
我试图在 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]


查看完整回答
反对 回复 2021-08-05
  • 3 回答
  • 0 关注
  • 249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信