我正在尝试测试我的一个变量是否为pd.NaT。我知道它是NaT,但它仍然不会通过测试。例如,以下代码不打印任何内容:
a=pd.NaT
if a == pd.NaT:
print("a not NaT")
有没有人有线索?有没有办法有效地测试a
是否为NaT?
答案 0 :(得分:25)
Pandas NaT
的行为类似于浮点NaN
,因为它不等于它自己。相反,您可以使用pandas.isnull
:
In [21]: pandas.isnull(pandas.NaT)
Out[21]: True
这也为无和NaN返回True
。
从技术上讲,您还可以使用NaT
检查Pandas x != x
,遵循用于浮点NaN的常见模式。但是,这可能会导致NumPy 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
的功能也失败了,并带有Pandas 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.isnull
适用于Pandas和NumPy NaTs,所以它可能是要走的路:
In [34]: pandas.isnull(pandas.NaT)
Out[34]: True
In [35]: pandas.isnull(numpy.datetime64('NaT'))
Out[35]: True
答案 1 :(得分:6)
pd.NaT is pd.NaT
是
这对我有用。
答案 2 :(得分:0)
对于pandas.NaT,numpy.nan或None,您也可以使用pandas.isna():
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]
答案 3 :(得分:0)
如果它位于Series
(例如DataFrame
列)中,您也可以使用.isna()
:
pd.Series(pd.NaT).isna()
# 0 True
# dtype: bool