TypeError:输入类型不支持ufunc'isfinite',并且输入不能安全地强制为任何受支持的类型

时间:2019-07-25 17:12:47

标签: python-3.x numpy

运行此行后,出现以下错误: TypeError:输入类型不支持ufunc'isfinite',并且根据强制转换规则“ safe”不能将输入安全地强制转换为任何受支持的类型

df[~(  (pd.np.isclose(df.Sizes.round(3), df.Volumes))  & (df['color'] == 'Blue')   )] 

我该如何解决?

1 个答案:

答案 0 :(得分:0)

In [152]: df=pd.DataFrame(np.arange(12.).reshape(4,3), columns=['one','two','three'])                        
In [153]: df.three[:] = ['a',np.nan,4,3.2]                                                                   
In [154]: df                                                                                                 
Out[154]: 
   one   two three
0  0.0   1.0     a
1  3.0   4.0   nan
2  6.0   7.0     4
3  9.0  10.0   3.2
In [155]: pd.np.isclose(df.one.round(3), df.two)                                                             
Out[155]: array([False, False, False, False])
In [156]: pd.np.isclose(df.one.round(3), df.three)                                                           
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-156-d99a19b1d9b5> in <module>
----> 1 pd.np.isclose(df.one.round(3), df.three)

/usr/local/lib/python3.6/dist-packages/numpy/core/numeric.py in isclose(a, b, rtol, atol, equal_nan)
   2520 
   2521     xfin = isfinite(x)
-> 2522     yfin = isfinite(y)
   2523     if all(xfin) and all(yfin):
   2524         return within_tol(x, y, atol, rtol)

TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

在两个float32列上的测试有效,但是当一列是具有非数字值的对象dtype时,会引发此错误。