计算np.where()数组python中的项数

时间:2017-04-22 17:24:18

标签: python arrays numpy tuples

我目前正在尝试比较pandas DataFrame中的两列:

--------------- Cluster Assignment ---------------
           ID      Class   Cluster
    0   1000025      2        4
    1   1002945      2        2
    2   1015425      2        4
    3   1016277      2        2
    4   1017023      2        4
    5   1017122      4        2
    6   1018099      2        4
    7   1018561      2        4
    8   1033078      2        4
    9   1033078      2        4
    10  1035283      2        4
    11  1036172      2        4
    12  1041801      4        4
    13  1043999      2        4
    14  1044572      4        2
    15  1047630      4        4
    16  1048672      2        4
    17  1049815      2        4
    18  1050670      4        2
    19  1050718      2        4

试图找到不匹配的行数以找到我的数据帧中的错误比率(完整的df比这长得多)。我正在使用np.where()进行比较,并且我得到了所有不正确行的准确输出,但现在我想添加错误的行数,然后将其除以总数行..我现在的问题是我得到了:

>>> data= np.where(df7['Class']!=df7['Cluster'])
>>> print(len(data))
1

如果我打印dataI的类型获取< class 'tuple' >。所以,我尝试使用以下方法从元组转换为列表:

>>> print(list(data))
[array([  9,  11,  17,  31,  32,  33,  34,  36,  38,  62,  64,  65, 135,
   156, 196, 201, 277, 301], dtype=int64)]

显然,这没有用,因为如果我尝试打印/存储该列表的长度,我会

>>> print(list(data))
[array([  9,  29,  30,  31,  33,  35,  59,  61,  62, 132, 153, 193, 198,
   274, 298], dtype=int64)]
>>> print('errors: ', len(cluster2wrong))
errors:  1

有人能指出我如何计算这些物品的方向吗?

1 个答案:

答案 0 :(得分:2)

np.where的结果是包含tuple数组的n,其中n是数组中的维度数。好消息是这些n数组中的每一个都具有相同的长度(每个代表每个找到的项目的一个“索引”),所以你可以使用它们中任何一个的长度:

>>> len(data[0])  # or len(data[i]) where i < dimensions of your df7

正如评论中已经提到的那样。但是,如果您只想知道满足条件的项目数量,可以使用np.count_nonzero

>>> a = np.array([2,3,4,5])
>>> b = np.array([3,3,3,3])

>>> np.count_nonzero(a != b)
3