更换熊猫或numpy的楠与无与MySQLdb的使用(Replacing Pandas or Nump

2019-07-17 20:39发布

我试图写一个数据框熊猫(或者可以使用numpy的阵列)使用MySQLdb的MySQL数据库。 MySQLdb的似乎不理解“楠”和我的数据库抛出了一个错误,说楠不在字段列表。 我需要找到一种方法来“南”转换成NoneType。

有任何想法吗?

Answer 1:

@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之间并没有在大熊猫的差异

然而,在这种特殊情况下,似乎你做(至少在这个答案的时间)。



Answer 2:

df = df.replace({pd.np.nan: None})

幸得这家伙在这里Github的问题 。



Answer 3:

您可以替换nanNone在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'>


Answer 4:

围绕绊倒后,这个工作对我来说:

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


Answer 5:

很老,但我偶然发现了同样的问题。 试着这样做:

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


Answer 6:

只是一个除了@Andy海登的回答:

由于DataFrame.mask是相反的双胞胎DataFrame.where ,它们有完全相同的签名,但是具有相反的含义:

  • DataFrame.where对于其中条件为False更换价值是有用的
  • DataFrame.mask用于where条件为True更换值。

所以在这个问题上,使用df.mask(df.isna(), other=None, inplace=True)可能会更直观。



文章来源: Replacing Pandas or Numpy Nan with a None to use with MysqlDB