2016-04-18 38 views
2

我想兩列合併成基礎上,NaN的第三列所期望的結果值熊貓numpy.where()使用 - 沒有得到

df['code2'] = np.where(df['code']==np.nan, df['code'], df['code1']) 

我得到只有在值,如果編碼1列碼2。其結果是在圖像輸出 圖片即將如圖

enter image description here

請告訴我什麼是錯在我寫的代碼。由於

回答

3

我認爲你需要isnull比較NaN

df['code2'] = np.where(df['code'].isnull(), df['code'], df['code1']) 

Docs

警告

一個人必須銘記,在Python(和numpy的)時,南的不相等,但沒有。請注意,Pandas/numpy使用np.nan!= np.nan這一事實,並將np.nan等視爲無。

In [11]: None == None 
Out[11]: True 

In [12]: np.nan == np.nan 
Out[12]: False 

所以相比於以上,標量相等比較對一個無/ np.nan不提供有用的信息。

In [13]: df2['one'] == np.nan 
Out[13]: 
a False 
b False 
c False 
d False 
e False 
f False 
g False 
h False 
Name: one, dtype: bool 
+0

非常感謝,現在的工作:) –

0

正確的方法來檢查,如果值是男是使用np.isnan(val)

np.nan == np.nan 
False 

np.isnan(np.nan) 
True 
df = pd.DataFrame({'a': [np.nan, 1, 2]}) 

>>> np.isnan(df.a) 
0  True 
1 False 
2 False 
Name: a, dtype: bool