用 None 替换 Pandas 或 Numpy Nan 以与 MysqlDB 一起使用

新手上路,请多包涵

我正在尝试使用 MysqlDB 将 Pandas 数据框(或可以使用 numpy 数组)写入 mysql 数据库。 MysqlDB 似乎不理解“nan”,我的数据库抛出一个错误,指出 nan 不在字段列表中。我需要找到一种方法将“nan”转换为 NoneType。

有任何想法吗?

原文由 FinDev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 437
2 个回答

@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


注意:你不能做什么重铸数据帧 dtype 允许所有数据类型类型,使用 astype ,然后是数据帧 fillna 方法:

 df1 = df.astype(object).replace(np.nan, 'None')

不幸的是,无论是这个,还是使用 replace ,都不能与 None 一起使用,请参阅 这个(已关闭)问题


顺便说一句,值得注意的是,对于大多数用例,您不需要将 NaN 替换为 None,请参阅有关 pandas 中 NaN 和 None 之间区别的 问题。

但是,在这种特定情况下,您似乎这样做了(至少在回答此问题时)。

原文由 Andy Hayden 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

注意: 对于 pandas 版本 <1.4, 这会将 所有 受影响 的 dtype 更改为 object

为避免这种情况,请改用以下语法:

 df = df.replace(np.nan, None)

这个 Github 问题Killian Huyghe 的评论中,感谢这个人。

原文由 EliadL 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题