J'essaie de tester si l'une de mes variables est pd.NaT. Je sais que c'est NaT, et il ne passera toujours pas le test. Par exemple, le code suivant n'imprime rien:
a=pd.NaT
if a == pd.NaT:
print("a not NaT")
Est-ce que quelqu'un a un indice? Existe-t-il un moyen de tester efficacement si a
est NaT?
Les pandas NaT
se comportent comme un NaN
à virgule flottante, en ce sens qu’ils ne sont pas égaux à eux-mêmes. Au lieu de cela, vous pouvez utiliser pandas.isnull
:
In [21]: pandas.isnull(pandas.NaT)
Out[21]: True
Ceci retourne également True
pour None et NaN.
Techniquement, vous pouvez aussi vérifier Pandas NaT
avec x != x
, suivant un modèle commun utilisé pour NaN à virgule flottante. Toutefois, cela est susceptible de poser des problèmes avec les NaP NumPy, qui se ressemblent beaucoup et représentent le même concept, mais qui sont en réalité d'un type différent avec un comportement différent:
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
, la fonction pour vérifier NumPy NaT
, échoue également avec un 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
fonctionne pour les deux Pandas et NumPy NaTs, donc c'est probablement la voie à suivre:
In [34]: pandas.isnull(pandas.NaT)
Out[34]: True
In [35]: pandas.isnull(numpy.datetime64('NaT'))
Out[35]: True