我试图写一个数据框熊猫(或者可以使用numpy的阵列)使用MySQLdb的MySQL数据库。 MySQLdb的似乎不理解“楠”和我的数据库抛出了一个错误,说楠不在字段列表。 我需要找到一种方法来“南”转换成NoneType。
有任何想法吗?
我试图写一个数据框熊猫(或者可以使用numpy的阵列)使用MySQLdb的MySQL数据库。 MySQLdb的似乎不理解“楠”和我的数据库抛出了一个错误,说楠不在字段列表。 我需要找到一种方法来“南”转换成NoneType。
有任何想法吗?
@bogatron有它的权利,你可以使用where
,这是值得注意的是,你可以在熊猫本身做到这一点:
df1 = df.where((pd.notnull(df)), None)
注:此更改所有列的D型到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
看到这个(关闭)的问题 。
顺便说一句,这是值得注意的是,对于大多数使用情况下,你不需要用无以取代的NaN,看到这个问题的NaN之间并没有在大熊猫的差异 。
然而,在这种特殊情况下,似乎你做(至少在这个答案的时间)。
df = df.replace({pd.np.nan: None})
幸得这家伙在这里Github的问题 。
您可以替换nan
与None
在numpy的数组:
>>> 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 = df.astype(object).where(pd.notnull(df),None)
很老,但我偶然发现了同样的问题。 试着这样做:
df['col_replaced'] = df['col_with_npnans'].apply(lambda x: None if np.isnan(x) else x)
只是一个除了@Andy海登的回答:
由于DataFrame.mask
是相反的双胞胎DataFrame.where
,它们有完全相同的签名,但是具有相反的含义:
DataFrame.where
对于其中条件为False更换价值是有用的。 DataFrame.mask
用于where条件为True更换值。 所以在这个问题上,使用df.mask(df.isna(), other=None, inplace=True)
可能会更直观。