1. ホーム
  2. python

[解決済み] ある変数がpd.NaTであるかどうかをテストするには?

2023-01-29 01:15:10

質問

私の変数の1つが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

これはまた True を返します。

技術的には、Pandasをチェックすることもできます。 NaTx != x で、浮動小数点のNaNに使われる一般的なパターンに従っています。しかし、これはNumPyの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 で失敗し、さらに 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のNaTの両方で動作するので、おそらくこの方法でしょう。

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

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