用一个无代替大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数组中使用None
replacenan
:
>>> 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)