我正在尝试使用MysqlDB编写一个熊猫数据框(或可以使用numpy数组)到mysql数据库。 MysqlDB似乎并不理解'南',我的数据库抛出一个错误,说南不在字段列表中。我需要找到一种方法将'nan'转换为NoneType。用无代替熊猫或Numpy Nan与MysqlDB一起使用
任何想法?
我正在尝试使用MysqlDB编写一个熊猫数据框(或可以使用numpy数组)到mysql数据库。 MysqlDB似乎并不理解'南',我的数据库抛出一个错误,说南不在字段列表中。我需要找到一种方法将'nan'转换为NoneType。用无代替熊猫或Numpy Nan与MysqlDB一起使用
任何想法?
@bogatron有它的权利,你可以使用,这是值得注意的是,你可以在熊猫本身做到这一点:
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
允许所有数据类型的类型,使用astype
,然后将数据帧fillna
方法:
df1 = df.astype(object).replace(np.nan, 'None')
不幸的是,这也不使用replace
,与None
一起使用,参见this (closed) issue。
顺便说一句,这是值得注意的是,对于大多数使用情况下,你不需要用无以取代的NaN,看到这个问题有关the difference between NaN and None in pandas。
但是,在这个特定的情况下,它似乎你(至少在这个答案的时候)。
cripes,对不起,非常好的一点。也许你可以用'NULL'或'None'代替... –
使用pandas更新自己的'where'(奇怪的是不在文档中!) –
参见文档http://pandas.pydata.org/pandas-docs /stable/indexing.html#where-and-masking – Jeff
您可以在numpy的阵列替换nan
与None
:
>>> 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'>
唯一潜在的问题是'dtype'的变化,''x.dtype''是'dtype('float64')',而'y.dtype'是'dtype('object')'。 – Jaime
相当古老,但我偶然发现了同样的问题。 试着这样做:
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)
有没有设置,可以在熊猫改变,使其返回'None'为'NULL'而不是' nan'? –