postgresql - 如何将 Pandas 数据帧整数列中的 NaN 处理到 postgresql 数据库
问题描述
我有一个带有“年”列的熊猫数据框。但是,由于外部合并,某些行具有 np.NaN 值。因此 pandas 中列的数据类型被转换为 float64 而不是整数(整数不能存储 NaN?)。接下来,我想将数据框存储在 postGreSQL 数据库中。为此,我使用:
df.to_sql()
一切正常,但我的 postGreSQL 列现在类型为“双精度”,并且 np.NaN 值现在为 [null]。这一切都是有道理的,因为输入列类型是 float64 而不是整数类型。
我想知道是否有一种方法可以将结果存储在带有 [nans] 的整数类型列中。
示例笔记本
阿米回答的结果:
解决方案
(整数不能存储 NaN?)
不,他们不能。如果您查看postgresql 数字文档,您可以看到字节数和范围是完全指定的,整数不能存储它。
在这种情况下,一个常见的解决方案是按照惯例决定某个数字在逻辑上是 nan。在您的情况下,如果是年份,您可能会选择一个负值(或仅 -1)。在编写之前,您可以使用
df.year = df.year.fillna(-1).astype(int)
或者,您可以将另一列定义为year_is_none
.
或者,您可以将它们存储为浮点数。
这些解决方案在内存方面从最有效到最不有效。
推荐阅读
- mysql - mysql查询-不在和/或之间的冲突
- javascript - 如何在 React Native 中发送账户验证邮件?
- c++ - 调用函数时变量突然无故改变
- mysql - MySQL 使用 ORDER by query 做出了糟糕的优化选择,并且 EXPLAIN 不正确
- python - 加载具有相似文件名的文件的 Pythonic 方式
- html - 使用 CSS 网格将所有项目水平向左对齐
- sql - 在多个表中双重分组
- javascript - setTimeout 会延迟函数的创建吗?
- django - Django和crispy form,如何在crispy Layout中添加id和name
- amazon-web-services - AWS CDK - 角色和策略创建