2016-07-14 149 views
2

我需要在我的數據幀1個空值以0熊貓pd.isnull()函數

這裏更換不爲空值是我的數據框:

my_list= [['a','b','c'],['test1','test2',None],[None,'101','000']] 

mydf= pd.DataFrame(my_list,columns=['col1','col2','col3']) 

mydf 

    col1 col2 col3 
0  a  b  c 
1 test1 test2 None 
2 None 101 000 

mydf.where((pd.isnull(mydf)),0,inplace=True) 

mydf 

    col1 col2 col3 
0  0 0  0 
1  0 0 None 
2 None 0  0 

我不知道爲什麼用零代替非零值。 pd.notnull()則相反。任何人都可以解釋我在這裏失蹤了嗎?

回答

4

只要做到:

mydf = mydf.notnull() * 1 
mydf 

enter image description here

爲了完整

mydf.isnull() * 1 

enter image description here

+1

這很聰明! – MaxU

+0

看起來不錯。但我想知道爲什麼pd.notnull做相反的事情。這是一個錯誤。這完全是誤導! – Rtut

+3

@Rut可能會對pd.isnull和pd.notnull產生困惑嗎?如果值不爲空,則pd.notnull返回True。 – ayhan

2

這是where預期的行爲。根據文檔,where保留值爲True並替換值爲False,並且pd.isnull將返回True僅限None條目,這就是爲什麼他們是唯一被保留的原因。

要麼你想使用mask功能與pd.isnull

mydf.mask(pd.isnull(mydf), 0, inplace=True) 

或者你要使用wherepd.notnull

mydf.where(pd.notnull(mydf), 0, inplace=True) 

無論如何,@ piRSquared的方法可能比任何的更好以上。

+1

@Rtut,這個答案回答你的問題:'但是我想知道爲什麼pd.notnull做相反的事情' – MaxU