2016-09-16 75 views
0

我試圖根據Nan是常見的系列整數比較創建虛擬變量。如果有任何Nan值,則A>比較會引發錯誤,但我希望比較返回Nan。我知道我可以使用fillna()來替換Nan,我知道這個值是錯誤的,但我希望有一個更優雅的方法可以做到這一點。如果我使用的數量少於或使用了可能是正數或負數的變量,那麼我需要更改fillna()中的值,並且這是再次出現錯誤的機會。有沒有什麼辦法可以讓Nan = Nan?03 < Nan = Nan?python pandas在整數比較中忽略Nan

要清楚,我想這一點:

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

返回空,如果var爲空,1如果是30+,否則爲0。目前我得到ValueError:不能從重複軸重新索引。

+3

爲什麼'30 EdChum

+0

另外,你不能在一個布爾數組中有NaNs。所以,即使你過濾並做你想做的事情,你也會得到一組浮標。 – 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 

這掩蓋了布爾數組從(s1 < s2)返回如果其中任何一個爲NaN。在那種情況下,它返回NaN。但是你不能在一個布爾數組中使用NaN,所以它將被作爲浮點運算。