nat = np.datetime64('NaT')
nat == nat
>> FutureWarning: In the future, 'NAT == x' and 'x == NAT' will always be False.
np.isnan(nat)
>> TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
我如何检查datetime64是否是NaT?我似乎无法从文档中挖掘出任何东西。我知道Pandas可以做到这一点,但我宁愿不为如此基本的东西添加依赖项。
6条答案
按热度按时间bd1hkmkf1#
pandas可以使用
pandas.isnull
检查NaT
:如果你不想使用Pandas,你也可以定义你自己的函数(部分取自Pandas源):
这可正确识别NaT值:
如果不是datetime或timedelta,则会意识到:
将来numpy代码中可能会有一个
isnat
-函数,至少他们有一个(当前打开的)关于它的pull请求:Link to the PR (NumPy github)xjreopfe2#
从NumPy版本1.13开始,它包含一个
isnat
函数:它也适用于数组:
ttp71kqs3#
**简介:**这个答案是在Numpy是1.11版本的时候写的,NAT比较的行为应该从1.12版本开始改变。很明显,事实并非如此,答案的第二部分是错误的。答案的第一部分可能不适用于新版本的Numpy。请确保你已经检查了下面MSeifert的答案。
第一次进行比较时,总是会有警告,但同时返回的比较结果是正确的:
如果要禁止显示警告,可以使用catch_warnings上下文管理器:
**EDIT:**由于某些原因,Numpy版本1.12中的NAT比较行为没有改变,因此下一个代码不一致。
最后,您可以检查numpy version来处理自版本1.12.0以来更改的行为:
**EDIT:**如MSeifert所述,Numpy从版本1.13开始就包含
isnat
函数。qvk1mo1f4#
非常简单,而且快得惊人**:(没有麻木或Pandas)
好吧,这是一个有点讨厌,但考虑到周围的模糊'NaT'它做的工作很好。
在比较两个日期(其中一个可能是NaT)时,它也很有用,如下所示:
guicsvcw5#
这种方法避免了警告,同时保留了面向数组的计算。
rqcrx0a66#
另一种方法是捕捉例外: