用一个无代替大pandas或Numpy Nan与MysqlDB使用

我正在尝试使用MysqlDB将一个pandas数据框(或可以使用一个numpy数组)写入一个mysql数据库。 MysqlDB似乎不明白'南',我的数据库抛出一个错误,说南不在字段列表中。 我需要find一种方法将'nan'转换为NoneType。

有任何想法吗?

@ bogatron是正确的,你可以where使用,值得注意的是,你可以在pandas本地进行:

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

注意:这将所有列的dtype更改为object

例:

 In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where((pd.notnull(df)), None) In [4]: df1 Out[4]: 0 0 1 1 None 

注意:你不能重做DataFrames dtype以允许所有数据typestypes,使用astype ,然后使用DataFrame fillna方法:

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

不幸的是,这一点,也没有使用replaceNone看到这个(封闭)的问题 。


顺便说一句,值得注意的是,对于大多数使用情况,您不需要将NaNreplace为None,请参阅有关“pandas”中NaN和None之间区别的问题。

然而,在这个特定的情况下,似乎你(至less在这个答案的时候)。

你可以在你的numpy数组中使用Nonereplacenan

 >>> 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'> 

相当古老,但我偶然发现了同样的问题。 尝试这样做:

 df['col_replaced'] = df['col_with_npnans'].apply(lambda x: None if np.isnan(x) else x) 

在磕磕绊绊之后,这为我工作:

 df = df.astype(object).where(pd.notnull(df),None)