2017-07-20 5 views
2

私はPandas DataFrameカラムでNaNを0に変換しようとしていますが、 "where"関数は期待したものとは逆の動作をしています。pandasどこが期待通りの動作をしますか

次のコードがNaNのインデックス4,5,6及び7

from collections import Counter 
import pandas as pd 

x = Counter(pd.np.random.choice(24,2000)) 
df = pd.DataFrame({'x':x}) 
df.loc[4:7,'x'] = pd.np.nan 
df 

にして一つの列を含むデータフレームを作成します。私はNaN値がしていたところ期待

df.where(df.isnull() == True,0) 

を使用代わりに0に変更されました。何が起こったかは、NaNがすべて0に変更されたことです。

誰がどのように動作するのかの背後にある論理を説明できますか?

答えて

2
df.where(condition,other) 

、現在の値を返します。呼び出し元のDataFrameの各要素について、condがTrueの場合、要素が使用されます。それ以外の場合は、DataFrame otherの対応する要素が使用されます。

変更

df.where(df.isnull() == True,0) 

条件が満たされた場合だけで、その後のデータフレームが他の変更はありませんが0(他のパラメータに言及した任意の値)

あなたのコード内の単純な変更が正常に動作しますを設定しました

df.where(df.notnull() == True,0) 

またはから

df.where(df.isnull() != True,0) 
1

まず第一に、あなたが使用する必要があります。

df.mask(df.isnull() == True,0) 

それとも

df.where(df.isnull() != True,0) 

出力 - ヘッド(10):

 x 
0 85.0 
1 96.0 
2 78.0 
3 93.0 
4 0.0 
5 0.0 
6 0.0 
7 0.0 
8 100.0 
9 77.0 

さて、df.where(condition,0)状態:

自己と同じ形状のオブジェクトを返します。対応するエントリ は、自己からのものであり、condはTrueであり、そうでなければ他からのものです。

条件が真であるときに、それはそうでなければ0

df.mask(condition,0)反対ドキュメント状態し、現在の値を返す:自己及びその対応するエントリとして

戻る同じ形状のオブジェクトを は自己からcondがFalse、そうでなければ他のものからのものです。

とき偽だから、そうでない場合(TRUE)復帰方法は、IF-THENイディオムのアプリケーションで0

関連する問題