NaN は、 pandasで一貫して欠損データのプレースホルダーとして使用され、一貫性は良好です。私は通常 NaN を"missing"として読み/翻訳します。ドキュメントの「欠損データの処理」セクションも参照してください。
Wes はドキュメントの「NA 表現の選択」に次のように書いています。
何年にもわたる本番環境での使用の後、[NaN] は、少なくとも私の意見では、NumPy と Python の一般的な状況を考えると、最良の決定であることが証明されています。特別な値 NaN (Not-A-Number) がNA 値としてあらゆる場所で使用され、NA 値を検出するために dtype 全体で使用できるAPI 関数がありisnull
ます。
...
したがって、私は Pythonic の「実用性が純粋さを超える」アプローチを選択し、NA を表すために float およびオブジェクト配列で特別な値を使用し、NA が必要な場合に整数配列を float に昇格するというはるかに単純なアプローチのために、整数 NA 機能を交換しました。紹介された。notnull
注:欠損データを含む整数シリーズが floats にアップキャストされるという「落とし穴」。
私の意見では、(None ではなく) NaN を使用する主な理由は、効率の低いオブジェクト dtype ではなく、numpy の float64 dtype で格納できるためです。 NA 型プロモーションを参照してください。
# without forcing dtype it changes None to NaN!
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Jeff はこれについて次のようにコメントしています:
np.nan
ベクトル化された操作を可能にします。それは浮動小数点値ですが、None
定義により、基本的にnumpyのすべての効率を無効にするオブジェクトタイプを強制します。
したがって、3 回繰り返します: object==bad, float==good
そうは言っても、多くの操作は None と NaN で同じように機能する可能性があります (ただし、サポートされていない可能性があります。つまり、驚くべき結果が得られる場合があります)。
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
2 番目の質問に答えるには、欠落データ (NaN) をテストするためにと
を使用する必要があります。pd.isnull
pd.notnull