用一个无代替大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') 
  不幸的是,这一点,也没有使用replace , None看到这个(封闭)的问题 。 
顺便说一句,值得注意的是,对于大多数使用情况,您不需要将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)