【发布时间】:2021-12-23 08:13:02
【问题描述】:
我需要在 Python(特别是 NumPy)中将 NaN 值转换为整数,不幸的是这会引发错误。对于那些不熟悉这个问题的人,这里有一个 MWE 展示它:
import numpy as np
test_data = [[2.3, 4], [1.1, np.nan]]
test_array = np.array(test_data, dtype=[("col1", float), ("col2", int)])
运行此代码会产生错误ValueError: cannot convert float NaN to integer。之前有关于此的问题,最值得注意的是here 和here,但它们只提供了在我的情况下没有用的解决方法。以下是他们给出的一些解决方案以及我想到的一些解决方案,以及它们对我不起作用的原因:
- 删除具有 NaN 值的行。不幸的是,我正在创建的表格的全部目的是提供一个目标列表,其中一些目标缺少某些参数中的数据,因此删除这些行会破坏创建表格的全部目的。
- 将 NaN 值替换为 0。不幸的是,在某些情况下,这实际上会向读者暗示一些不正确的事情。此外,我提交给的期刊要求此类空格为空白,而使用 NaN 是我所知道的在数字单元格中生成空格的唯一方法。
- 将相关列转换为浮点数,以便我可以毫无问题地使用 NaN。不幸的是,我遇到问题的一列指出了一个特定的(并且每行都在变化)引用,而引用 1.0 的引用听起来很奇怪。
- 将有问题的列转换为字符串,然后插入一个空白字符串。不幸的是,这种格式会跟踪列中的数据类型,我认为期刊会不高兴将明显的整数列为字母字符。这也适用于第 3 点。
这就是我所在的地方。我需要在一列整数中有空白条目,而我所知道的浮点数的唯一方法不同意 Python。在我的具体情况下,此类问题的其他答案中建议的各种解决方法是不可行的。那么如何通过某种方式将 NaN 转换为 int 或以其他方式插入空白 int 来使其工作?
【问题讨论】:
-
可以使用 Pandas,支持可空整数
Int64类型。 -
目前你不能用 numpy 做到这一点,但你可以用 Pandas 来做,正如@Quang hoang 所说:pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html
标签: python numpy type-conversion integer nan