変数がpd.NaTかどうかをテストするにはどうすればいいですか? 質問する

変数がpd.NaTかどうかをテストするにはどうすればいいですか? 質問する

変数の 1 つが pd.NaT かどうかをテストしようとしています。NaT であることはわかっていますが、それでもテストに合格しません。たとえば、次のコードは何も出力しません。

a=pd.NaT

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

a誰か手がかりを持っていますか? NaT かどうかを効果的にテストする方法はありますか?

ベストアンサー1

Pandas はNaT浮動小数点 のように動作しNaN、それ自体と等しくありません。代わりに、 を使用できますpandas.isnull

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

TrueこれはNone と NaN の場合にも返されます。

NaT技術的には、浮動小数点 NaN に使用される一般的なパターンに従って、でPandas をチェックすることもできますx != x。ただし、これは NumPy NaT で問題を引き起こす可能性があります。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.isnatNumPy をチェックする関数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.isnullPandas と NumPy NaTs の両方で機能するので、おそらくこれが最適な方法です。

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

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

おすすめ記事