2016-09-01 291 views
3

我有一個帶有混合數據類型的pandas DataFrame。我想用None替換所有的空值(而不是默認的np.nan)。出於某種原因,這似乎幾乎不可能。使用None而不是np.nan作爲pandas中的空值DataFrame

實際上,我的DataFrame是從csv讀入的,但這裏有一個簡單的DataFrame,它具有混合的數據類型來說明我的問題。

df = pd.DataFrame(index=[0], columns=range(5)) 
df.iloc[0] = [1, 'two', np.nan, 3, 4] 

我不能這樣做:

>>> df.fillna(None) 
ValueError: must specify a fill method or value 

也不:

>>> df[df.isnull()] = None 
TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value 

也不:

>>> df.replace(np.nan, None) 
TypeError: cannot replace [nan] with method pad on a DataFrame 

我曾經有隻字符串值的數據幀,所以我可以這樣做:

>>> df[df == ""] = None 

哪些工作。但是現在我混合了數據類型,這是不行的。

由於我的代碼的各種原因,這將有助於能夠使用None作爲我的空值。有沒有辦法可以將null值設置爲None?或者我只需回顧其他代碼,並確保我在任何地方都使用np.isnan或pd.isnull?

+0

'DF [df.isnull()] = None' - 工作正常,我(大熊貓0.18。 1) – MaxU

回答

6

Use pd.DataFrame.where
用途當條件滿足df值,否則使用None

df.where(df.notnull(), None) 

enter image description here

+0

謝謝!在看這個之前,我嘗試了很多不同的變化。到目前爲止,它的工作非常完美(我的數據中不能有numpy.nan,因爲我將它複製到SQL Alchemy對象中,SQL Alchemy在寫入數據庫時​​無法處理nan) – happyskeptic

相關問題