127

pandas を使用して csv ファイルの 2 つの列を読み取りreadcsv()、その値を辞書に割り当てています。列には、数字と文字の文字列が含まれています。セルが空の場合があります。None私の意見では、その辞書エントリに読み取られる値は、代わりnanに割り当てられるべきです。確かNoneに空のセルにはnull値があるため、より説明的ですが、nan読み取られた値は数値ではないと言っているだけです。

None私の理解は正しいですか、との違いは何nanですか? nanの代わりにが割り当てられるのはなぜNoneですか?

また、空のセルの辞書チェックは以下を使用していますnumpy.isnan()

for k, v in my_dict.iteritems():
    if np.isnan(v):

しかし、これにより、このチェックを に使用できないというエラーが表示されvます。文字列ではなく、整数または浮動小数点変数が使用されるためだと思います。これが正しい場合v、「空のセル」/nanケースを確認するにはどうすればよいですか?

4

4 に答える 4

133

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.isnullpd.notnull

于 2013-07-08T19:43:37.483 に答える