python:TypeError:此类型未实现

时间:2016-03-09 04:50:23

标签: python python-2.7 numpy

我收到以下错误:

TypeError: Not implemented for this type

来自代码:

import numpy
     :
print(numpy.isnan([1.,2.,3.,'A']))

我想知道为什么它不会只是返回false?因为我只想检查数组是否有任何非数字值。谢谢!

2 个答案:

答案 0 :(得分:2)

问题是numpy.isnan函数只检测NaN并且只接受浮点数(或更精确的浮点数组),字符“A'不是NaN,它是一个字符,其类型为str;如果你尝试numpy.isnan('A'),你会得到同样的错误。您的代码仅适用于[1, 2, 3, numpy.nan]类型的列表:

print(numpy.isnan([1., 2., 3., numpy.nan]))
>>>[False False False True]

如果仅检查numpy.nan是您的目标,并且您希望获得单个布尔值以确定列表是否包含numpy.nan,则可能需要使用此代码:

print(numpy.isnan([1., 2., 3., numpy.nan]).any())
>>>True
print(numpy.isnan([1., 2., 3., 4.]).any())
>>>False

现在回到你想要的(检测列表是否包含非数字值,如' A'),你可以这样做:

def contains_non_numeric(my_list):
    for item in my_list:
        if any([isinstance(item, float), isinstance(item, int), isinstance(item, complex)]):
        #You can remove or add the types that you find to be acceptable in your list
            continue
        else:
            return False
    return True

尝试这一点,你会得到你想要的东西:

contains_non_numeric([1, 2, 3, 'A'])
>>>True

contains_non_numeric([1, 2, 3])
>>>False

答案 1 :(得分:1)

它抱怨它无法测试字符串:

In [167]: np.isnan([1,2,3,'A'])
...

TypeError: Not implemented for this type
In [168]: np.isnan('A')
...
TypeError: Not implemented for this type

isnan不是非数字类型的测试。

  

isnan(x [,out]):   为NaN测试元素,并将结果作为布尔数组返回。

由于您正在测试列表(而不是数组),我建议:

In [172]: try: [float(i) for i in [1.,2.,3.,'A']]
   .....: except ValueError:
   .....:     print('has a nonnumeric element')
   .....:     
has a nonnumeric element

注意我们尝试将列表转换为数组时得到的结果:

In [173]: np.array([1.,2.,3.,'A'])
Out[173]: 
array(['1.0', '2.0', '3.0', 'A'], 
      dtype='<U3')

字符串数组。