我試圖在 NaT 面前獲取包含 datetime64 數(shù)據(jù)的幾個(gè) Pandas Series 對象的最小值和最大值。如果 dtype 是 float64, np.minimum 和 np.maximum 會按照我想要的方式工作。也就是說,一旦比較中的任何元素為 NaN,NaN 將是該比較的結(jié)果。例如:>>> 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]無論是計(jì)算最小值還是最大值,我都希望索引 0、2 和 3 顯示為 NaT。(我意識到 numpy 的函數(shù)可能不是最佳選擇,但我沒有成功找到合適的 Pandas 類似物。)在做了一些閱讀之后,我開始意識到 NaT 只是近似 NaN,后者具有適當(dāng)?shù)母↑c(diǎn)表示。進(jìn)一步閱讀表明沒有簡單的方法可以讓 NaT“污染”這些比較。讓 NaT 在最小/最大比較中傳播的正確方法是什么,就像 NaN 在浮點(diǎn)上下文中所做的那樣?也許有與 numpy.{maximum,minimum} 等價(jià)的 Pandas 是 NaT 感知的?
3 回答

慕姐4208626
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
不確定這是最好的方法,但是如果您將 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]
添加回答
舉報(bào)
0/150
提交
取消