2017-10-26 8 views
4

をnp.nanする正規表現を使用して値を置き換えます。たとえば私は以下のようにデータフレーム持って

data1 = {"first":["alice", "bob", "carol"], 
     "last_huge":["foo", "bar", "baz"]} 
df = pd.DataFrame(data1) 

を、私は「A」に、すべての文字「O」を置換したい:

その後、私はありません

df.replace({"o":"a"},regex=True) 
Out[668]: 
    first last 
0 alice faa 
1 bab bar 
2 caral baz 

私は必要なものを返します。しかし

、私はnp.nanに「O」を交換したいとき、それはnp.nanに文字列全体を変更します。 パンダの文書から説明はありますか?私はsource codeを通していくつかの情報を見つけることができます。

詳細情報:(それはnp.nanに文字列全体を変更します)

df.replace({"o":np.nan},regex=True) 
Out[669]: 
    first last 
0 alice NaN 
1 NaN bar 
2 NaN baz 
+0

結果は何ですか? –

+0

@ShiheZhang欲望の結果はありません。ちょうど+正規表現にこのような振る舞いがあると、私はこれに関連する文書を見つけることができません。ソースコードを読むだけです。 – Wen

+0

あなたは 'pandas'のどのバージョンを使用していますか?これは実際には、文字列以外のオブジェクトで発生しますが、私が知る限り、 'object()'を渡してみてください。 –

答えて

3

NaN is consistently used as a placeholder for missing、それが唯一のエントリ全体が危険にさらされている意味することができ、「失われた」との文字列の一部を置き換えます。 NaNがデータに侵害された場合、NaN汚染(またはこれに類するものは参照があるかどうかがわかります)と呼ばれるこれを聞いたことがあります。それは常にそうではない、と述べた

:一部の言語で

In [11]: s = pd.Series([1, 2, np.nan, 4]) 

In [12]: s.sum() 
Out[12]: 7.0 

In [13]: s.sum(skipna=False) 
Out[13]: nan 

あなたはデフォルトの動作として偽skipnaを=表示されますが、いくつかは激しくNaNで常に汚染のすべてのデータをすべきと主張しています。パンダはやや実用的なアプローチをとっています...

NaNの場合、本当の質問は何ですか?

+0

R sum(。、na.rm = 0) ' – Wen

+0

私にとって、なぜ彼らはエラーを返さないのか分かりません。文字列全体を' np.nan'に置き換えてください。少なくとも、警告を正しく返すべきです。 – Wen

+0

Pythonでは、正当な結果、警告を発する必要はありません。 –

1

cmath.nanmath.nanがあります。

CPython実装の詳細:数学モジュールは、プラットフォームC数学ライブラリ関数を中心とする薄いラッパーで構成されています。特別な場合の行動は、適切な場合にはC99規格の附属書Fに従う。現在の実装では、sqrt(-1.0)やlog(0.0)(C99 Annex Fでは無効な操作やゼロ除算の通知が推奨されます)などの無効な操作に対してValueErrorが発生し、オーバーフローした結果に対してOverflowErrorが発生します))。以上の入力引数がNaNでないかぎり、NaNは上記のいずれの関数からも返されません。その場合、ほとんどの関数 はNaNを返しますが、C99のAnnex Fに続いて、このルールにはいくつかの例外があります。たとえばpow(float( 'nan')、0.0)または hypot(float( 'nan ')、float(' inf '))。あなたの入力引数がNaNを持っている場合、それは、シグナリングのためにNaN

And also:

Pythonは 静かにNaNからのシグナリングNaNを区別するための努力をしないことに注意してください、と行動を返す短い言葉で

、 NaNは未指定のままです。 通常、すべてのNaNを静かであるかのように扱います。

+0

あなたはそれを学んでいただきありがとうございます – Wen

関連する問題