how to test if a variable is pd.NaT? how to test if a variable is pd.NaT? pandas pandas

how to test if a variable is pd.NaT?


Pandas NaT behaves like a floating-point NaN, in that it's not equal to itself. Instead, you can use pandas.isnull:

In [21]: pandas.isnull(pandas.NaT)Out[21]: True

This also returns True for None and NaN.

Technically, you could also check for Pandas NaT with x != x, following a common pattern used for floating-point NaN. However, this is likely to cause issues with NumPy NaTs, which look very similar and represent the same concept, but are actually a different type with different behavior:

In [29]: x = pandas.NaTIn [30]: y = numpy.datetime64('NaT')In [31]: x != xOut[31]: TrueIn [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-8Out[32]: False

numpy.isnat, the function to check for NumPy NaT, also fails with a 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 works for both Pandas and NumPy NaTs, so it's probably the way to go:

In [34]: pandas.isnull(pandas.NaT)Out[34]: TrueIn [35]: pandas.isnull(numpy.datetime64('NaT'))Out[35]: True


pd.NaT is pd.NaT

True

this works for me.


You can also use pandas.isna() for pandas.NaT, numpy.nan or None:

import pandas as pdimport numpy as npx = (pd.NaT, np.nan, None)[pd.isna(i) for i in x]Output:[True, True, True]