Replacing Pandas or Numpy Nan with a None to use with MysqlDB Replacing Pandas or Numpy Nan with a None to use with MysqlDB python python

Replacing Pandas or Numpy Nan with a None to use with MysqlDB


@bogatron has it right, you can use where, it's worth noting that you can do this natively in pandas:

df1 = df.where(pd.notnull(df), None)

Note: this changes the dtype of all columns to object.

Example:

In [1]: df = pd.DataFrame([1, np.nan])In [2]: dfOut[2]:     00   11 NaNIn [3]: df1 = df.where(pd.notnull(df), None)In [4]: df1Out[4]:       00     11  None

Note: what you cannot do recast the DataFrames dtype to allow all datatypes types, using astype, and then the DataFrame fillna method:

df1 = df.astype(object).replace(np.nan, 'None')

Unfortunately neither this, nor using replace, works with None see this (closed) issue.


As an aside, it's worth noting that for most use cases you don't need to replace NaN with None, see this question about the difference between NaN and None in pandas.

However, in this specific case it seems you do (at least at the time of this answer).


df = df.replace({np.nan: None})

Credit goes to this guy here on this Github issue.


You can replace nan with None in your numpy array:

>>> x = np.array([1, np.nan, 3])>>> y = np.where(np.isnan(x), None, x)>>> print y[1.0 None 3.0]>>> print type(y[1])<type 'NoneType'>