python - 计算数组中非 nan 值的数量

标签 python arrays

我有一个 float/nan 值列表,如下所示:

a = [(9.62, np.nan, 0.063), (np.nan, np.nan, np.nan), (np.nan, 0.34, np.nan), (9.50, 2.65, 5.85), (np.nan, np.nan, np.nan), (8.9423173497260166e-06, np.nan, np.nan), (np.nan, np.nan, np.nan), (10.53906499271581, np.nan, 3.4981897643207153e-08), (27.945228892337656, np.nan, np.nan), (np.nan, np.nan, np.nan), (0.00015676098048248007, 428.53224664333368, 15.597030989617416), (3.219339103511719e-08, np.nan, np.nan), (351.3486881626871, 118.79412856376891, 96.925698744436318), (np.nan, np.nan, np.nan), (np.nan, np.nan, np.nan), (0.038185812702743384, 0.011979539923543838, 1.4161404311887908e-05), (6.5891883211951452, np.nan, np.nan), (np.nan, np.nan, np.nan), (np.nan, np.nan, np.nan), (np.nan, np.nan, np.nan), (0.01992113565158183, 1.0858887135978378e-08, 6.949483102803238e-08), (np.nan, np.nan, np.nan), (0.0053471054969118897, 32.364223190908589, 0.29950485126829518), (0.022687094833899225, np.nan, 3.3927513616780456e-05), (0.0065459356887503, 5.0304474154655309e-06, 6.1755309734841293e-06), (1.2854278279876815e-07, 110.94572059986106, 2.0737305081677166e-06), (2.8909153747692473, np.nan, np.nan), (np.nan, np.nan, np.nan), (0.00085244354118369653, np.nan, 547.28608997823414), (0.21609437779080298, 2.9772785752782283e-08, 0.024868855470372788), (np.nan, 1.0571674432090431e-08, np.nan), (np.nan, 0.00042711039439664552, np.nan), (np.nan, 3.7576842775630178e-09, np.nan), (np.nan, 1.2436122988008544e-08, np.nan), (np.nan, 0.008772060008242254, np.nan), (np.nan, 2.9731267579988852, np.nan), (np.nan, 152.69348161610276, np.nan), (np.nan, 1.7976907012194907, np.nan), (np.nan, 0.0006232073677262973, np.nan), (np.nan, 1.3468250342036237e-08, np.nan), (np.nan, 6.9699321813542907e-05, np.nan), (np.nan, 5.2001506649804148e-05, np.nan), (np.nan, np.nan, np.nan)]

即:由N个子列表组成,每个子列表包含相同数量的元素M(在本例中为3,但可能会改变),其中每个这些元素的值要么是 float ,要么是 np.nan 值(我的实际列表具有更大的 NM 值)。

我需要有效地计算每个子列表中 np.nan 值的数量。如果数字为零(所有 np.nan 值),则应存储 np.nan 值。

最终的列表/数组看起来像(使用上面的a):

count = [2, nan, 1, 3, ...]

我尝试使用 np.count_nonzero(),但它将 np.nan 计为非零,因此它返回所有计数为 3

最佳答案

您可以使用numpy.isnan创建一个 bool 数组,然后使用sum为每行计算True(axis= 1):

import numpy as np
# count the non-nan values
non_nans = (~np.isnan(a)).sum(1)

# replace 0 count with np.nan
np.where(non_nans == 0, np.nan, non_nans)
# array([  2.,  nan,   1.,   3.,  nan, ...])

关于python - 计算数组中非 nan 值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44525825/

相关文章:

php - 如何从数据库特定的选定值添加到解码的 Json 数组

javascript - 用另一个对象更新对象数组中的对象

python - 在 Python 中将计数器打印到 csv 文件错误

php解析数组中的数组

python - Django 模板本地化错误

python - 在 Pandas 数据框中将两个公共(public)行的值分组为一个

Javascript 字符串数组转换为实际数组

Javascript 数组数组 -> array[index] 未定义

python - 在 python 中格式化 if-else 语句时遇到问题

python - 从 Pandas DataFrame 列中删除特定符号(unicode)