在pandas DataFrame中使用None而不是np.nan作为空值

时间:2016-09-01 19:51:12

标签: python pandas dataframe

我有一个混合数据类型的pandas DataFrame。我想用None替换所有空值(而不是默认的np.nan)。出于某种原因,这似乎几乎是不可能的。

实际上我的数据框是从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

我曾经有一个只有字符串值的DataFrame,所以我可以这样做:

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

哪个有效。但是现在我有混合数据类型,这是不行的。

由于我的代码的各种原因,能够使用None作为我的空值将是有帮助的。有没有办法可以将空值设置为None?或者我只需要返回我的其他代码并确保我在所有地方都使用np.isnan或pd.isnull?

1 个答案:

答案 0 :(得分:17)

Use pd.DataFrame.where
条件满足时使用df值,否则使用None

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

enter image description here