Pandas 如何测试变量是否为pd.NaT?

Pandas 如何测试变量是否为pd.NaT?,pandas,unit-testing,datetime,nan,Pandas,Unit Testing,Datetime,Nan,我试着测试我的变量之一是否是pd.NaT。我知道它是NaT,但它仍然无法通过测试。例如,以下代码不打印任何内容: a=pd.NaT if a == pd.NaT: print("a not NaT") 有人有线索吗?有没有一种方法可以有效地测试a是否为NaT?NaT的行为类似于浮点NaN,因为它不等于自身。相反,您可以使用pandas.isnull: In [21]: pandas.isnull(pandas.NaT) Out[21]: True 对于None和NaN,这也会返回T

我试着测试我的变量之一是否是pd.NaT。我知道它是NaT,但它仍然无法通过测试。例如,以下代码不打印任何内容:

a=pd.NaT

if a == pd.NaT:
    print("a not NaT")

有人有线索吗?有没有一种方法可以有效地测试
a
是否为NaT?

NaT
的行为类似于浮点
NaN
,因为它不等于自身。相反,您可以使用
pandas.isnull

In [21]: pandas.isnull(pandas.NaT)
Out[21]: True
对于None和NaN,这也会返回
True

从技术上讲,您还可以使用
x!=x
,遵循用于浮点NaN的通用模式。但是,这可能会导致NumPy NAT出现问题,这些NAT看起来非常相似,代表相同的概念,但实际上是一种不同类型的NAT,具有不同的行为:

In [29]: x = pandas.NaT

In [30]: y = numpy.datetime64('NaT')

In [31]: x != x
Out[31]: True

In [32]: y != y
/home/i850228/.local/lib/python3.6/site-packages/IPython/__main__.py:1: FutureWarning: In the future, NAT != NAT will be True rather than False.
  # encoding: utf-8
Out[32]: False
numpy.isnat
,用于检查numpy
NaT
的功能,也会因以下情况而失败:

In [33]: numpy.isnat(pandas.NaT)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-39a66bbf6513> in <module>()
----> 1 numpy.isnat(pandas.NaT)

TypeError: ufunc 'isnat' is only defined for datetime and timedelta.

您还可以将pandas.isna()用于pandas.NaT、numpy.nan或None:

import pandas as pd
import numpy as np

x = (pd.NaT, np.nan, None)
[pd.isna(i) for i in x]

Output:
[True, True, True]
真的


这对我很有用。

如果它在
系列中(例如
数据帧
列),您也可以使用
.isna()


pd.isnull
也适用于NAT。
pandas
numpy
遵循的标准是
NaN
不等同于自身。所以,即使你输入了
a==a
,你也会得到
False
投票重新打开,因为
pandas.NaT
实际上不是一个NumPy
NaT
,它在相等和
NumPy.isnat
检查中表现不同。@ALollz:NumPy实际上还没有这样做;有一个
未来警告
说他们计划,但现在,
numpy.datetime64('NaT')==numpy.datetime64('NaT')
。相关:
import pandas as pd
import numpy as np

x = (pd.NaT, np.nan, None)
[pd.isna(i) for i in x]

Output:
[True, True, True]
pd.NaT is pd.NaT
pd.Series(pd.NaT).isna()
# 0    True
# dtype: bool