python - 将 numpy float 组转换为整数,替换 NaN 值

标签 python arrays numpy type-conversion nan

我有一个包含值和 NaN 的 float64 numpy 数组:

[[ 5. nan nan nan nan nan nan nan nan nan nan nan nan]
 [nan  6. nan nan nan nan nan nan nan nan nan nan nan]
 [nan  7.  5. nan nan nan nan nan nan nan nan nan nan]
 [nan nan nan  7. nan nan nan nan nan nan nan nan nan]
 [nan nan nan nan  4. nan nan nan nan nan nan nan nan]
 [nan nan nan nan  5.  3. nan nan nan nan nan nan nan]
 [nan nan nan nan nan nan nan nan nan nan nan nan nan]
 [ 1. nan nan nan nan nan nan  4. nan nan nan nan nan]
 [nan nan nan nan nan nan  7. nan nan nan nan nan nan]
 [nan nan nan nan nan nan nan nan nan  7. nan nan nan]
 [nan nan nan nan nan nan  7. nan  7. nan  6. nan nan]
 [nan nan nan nan nan nan nan nan nan nan nan  7. nan]
 [nan nan nan nan nan nan nan  6. nan nan nan nan  5.]]

我想将所有数字转换为整数,但 np.roundnp.around 似乎无法完成这项工作。另外,我无法更改数组的类型,因为整数类型的数组不支持“nan”。我该怎么做?

最佳答案

将 NaN 转换为零: numpy.nan_to_num(arr) , 直接作用于数组,以及单个值。 (使用 ..., copy=False arg 避免浪费内存,即就地操作。)

所以要同时进行 NaN 替换和类型转换:numpy.nan_to_num(arr).astype(np.int)

from numpy import array, nan
arr = np.array([[5., nan, nan], [nan, 6., nan], [nan, 7., 5.]])

arr = np.nan_to_num(arr, copy=False).astype(np.int)
array([[5, 0, 0],
       [0, 6, 0],
       [0, 7, 5]])

将 NaN 转换为任何其他特定值: 您没有说要用什么值替换 NaN 。如果你想要一个不同于零的替换值,你需要使用逻辑索引来实现:arr[np.isnan(arr)] = -99 然后 .astype(np.int )

关于python - 将 numpy float 组转换为整数,替换 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697414/

相关文章:

php - 使用 php usort 进行第二次排序

python - Python 中的区域交集

python - Pandas DF - 测量频率,附加到适当的行并按 max(freq) 标准化

python - 不使用 key 从字典中检索信息

python - 删除满足条件的值加上 pandas DataFrame 中任意数量的下一个值

c++ - memcpy 期间出现 ConnectThread 错误

python - Numpy:函数内部的 Try/except 无法打印消息

python - pip 无法从本地 pypi 中找到包(jfrog artifactory)

python - 我正在尝试计算绝对 Xpath 一个作为子元素的添加按钮

java - JNA 的 Pointer.getPointerArray(long base) 和 Pointer.getStringArray(long base) 中的 'base' 是什么意思?