2016-09-16 4 views
0

ナンが共通の整数比較に基づいてダミー変数を作成しようとしています。 A>比較ではNan値がある場合はエラーが発生しますが、比較結果をNanに戻す必要があります。私はfillna()を使用してNanを私が偽であると知っている値に置き換えることができると理解していますが、これを行うためのよりエレガントな方法があることを願っています。私はfillna()の値を変更する必要があります。これは、より小さい値を使用した場合や、正または負の値を持つ変数を使用した場合、エラーを作成する機会がもう1つあります。何かを作る方法はありますか?< Nan = Nan? python pandas整数比較でナンバーを無視する

を明確にするために、私はこれをしたい:varがnullの場合、それは30+、そうでなければ0である場合

df['var_dummy'] = df[df['var'] >= 30].astype('int') 

は、1をヌルを返すこと。現在私はValueErrorを取得します:重複軸から再インデックスできません。ここで

+3

なぜ '30 EdChum

+0

また、boolean配列でNaNを持つことはできません。フィルタリングしてやりたいことをしても、浮動小数点数の配列があります。 – ayhan

+0

申し訳ありませんが、私は明確ではありませんでした。 x> 30、y = 1のような評価をしたい。Nan> 30を評価するとすぐにエラーが出る – Drevent

答えて

3

は方法です:

s1 = pd.Series([1, 3, 4, 2, np.nan, 5, np.nan, 7]) 
s2 = pd.Series([2, 1, 5, 5, np.nan, np.nan, 2, np.nan]) 

(s1 < s2).mask(s1.isnull() | s2.isnull(), np.nan) 
Out: 
0 1.0 
1 0.0 
2 1.0 
3 1.0 
4 NaN 
5 NaN 
6 NaN 
7 NaN 
dtype: float64 

それらのいずれかがNaNである場合は、このマスクは、ブール配列は、(s1 < s2)から返されました。その場合、NaNを返します。しかし、NaNをブール値の配列に持つことはできません。したがって、NaNはfloatとしてキャストされます。

関連する問題