[解決済み] NaNとNoneの違いは何ですか?
質問
pandasを使ってcsvファイルの2列を読み込んでいます。
readcsv()
を使用してcsvファイルを読み込み、その値を辞書に代入しています。列には数字と文字の文字列が含まれています。時折、セルが空の場合があります。私の考えでは、その辞書エントリに読み込まれる値は、以下のようになるはずです。
None
であるべきですが、代わりに
nan
が割り当てられています。確かに
None
は空の値を持つので、空のセルをより明確に表現しています。
nan
は読み取った値が数値でないことを示すだけです。
私の理解は正しいでしょうか?
None
と
nan
? なぜ
nan
の代わりに
None
?
また、空のセルがあるかどうかの辞書チェックは、これまで
numpy.isnan()
:
for k, v in my_dict.iteritems():
if np.isnan(v):
しかし、これは、このチェックを
v
. 文字列ではなく、整数や浮動小数点数の変数が使われることを意味しているからでしょう。もしそうだとすると、どうすれば
v
をチェックするにはどうしたらよいでしょうか。
nan
のようなケースはありませんか?
どのように解決するのですか?
NaNは、プレースホルダーとして 欠損データ 一貫して pandasでは というように、一貫性を持たせるのは良いことです。私は通常、NaNを次のように読み、翻訳しています。 行方不明 . も参照してください。 '欠損データとの連携' セクションも参照してください。
Wesはdocsに書いている 'NA-representationの選択' :
何年にもわたる実運用での使用の後、[NaN]は、少なくとも私の意見では、NumPyとPython全般の状況を考えると最良の決定であることが証明されています。特殊な値NaN (Not-A-Number) が使用されます。 どこでも をNA値として使用し、API関数の
isnull
とnotnull
というように、dtypes 全体で NA 値を検出するために使用することができます。
...
したがって、私は Pythonic な "実用性は純粋さに勝る" というアプローチを選択し、整数の NA 機能と引き換えに、NA を示すために float およびオブジェクト配列の特別な値を使用し、NA を導入しなければならないときは整数配列を float に昇格するという、より単純なアプローチに変更しました。
注 欠測を含む整数の系列は浮動小数点にアップキャストされるということです。 .
私の考えでは、(Noneではなく)NaNを使用する主な理由は、効率の悪いobject d型ではなく、numpyのfloat64 d型で格納できることです。 参照 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')
これに対するジェフのコメント(下)です。
np.nan
はベクトル化された操作を可能にします; その値は浮動小数点数ですがNone
はオブジェクト型を強制し、基本的にnumpyのすべての効率を無効にします。だから、高速に3回繰り返す:オブジェクト==悪い、浮動小数点==良い
とはいえ、多くの操作は None vs NaN でも同じように動作します (ただし、サポートされていない場合もあります)。 驚くべき結果 ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
2番目の質問に答えるために
を使用する必要があります。
pd.isnull
と
pd.notnull
で欠損データ(NaN)をテストします。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PandasやNumpyのNanをNoneに置き換えてMysqlDBで使用する。
-
[解決済み] NumPyでNaNを高速にチェックする
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] pandasプロットでX軸の目盛りラベルを回転させる方法