Python 对矩阵的修改总是以无穷大的值结束

Python 对矩阵的修改总是以无穷大的值结束,python,pandas,numpy,data-science,Python,Pandas,Numpy,Data Science,我完全被难住了。我有一个熊猫数据框,我已经取出了NaN和无限值: newdf=d f2.fillna(值=0)。替换([np.inf,-np.inf],0) 然后我将目标列转入numpy数组: X=newdf.as_矩阵(列=['emailopens'、'customersupport'、'emailclicks'、'formsubmit'、'pageviews'、'webvisits']) y=newdf.as_矩阵(列=['purchase']) 但是,当我尝试将这些数组放入sklearn

我完全被难住了。我有一个熊猫数据框,我已经取出了NaN和无限值:

newdf=d f2.fillna(值=0)。替换([np.inf,-np.inf],0)

然后我将目标列转入numpy数组:

X=newdf.as_矩阵(列=['emailopens'、'customersupport'、'emailclicks'、'formsubmit'、'pageviews'、'webvisits'])

y=newdf.as_矩阵(列=['purchase'])

但是,当我尝试将这些数组放入sklearn KNN分类器中时,
clf=neighborsvidentifier.kneighborsvidentifier(4,权重='uniform')
型号=clf.fit(X,y)

我得到:

`---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-195-f3b09646d9f2> in <module>()
      1 clf = neighbors.KNeighborsClassifier(4, weights = 'uniform')
----> 2 model = clf.fit(X, y)

/usr/local/lib/python3.6/site-packages/sklearn/neighbors/base.py in fit(self, X, y)
    759         """
    760         if not isinstance(X, (KDTree, BallTree)):
--> 761             X, y = check_X_y(X, y, "csr", multi_output=True)
    762 
    763         if y.ndim == 1 or y.ndim == 2 and y.shape[1] == 1:

/usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    519     X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,
    520                     ensure_2d, allow_nd, ensure_min_samples,
--> 521                     ensure_min_features, warn_on_dtype, estimator)
    522     if multi_output:
    523         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

/usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    405                              % (array.ndim, estimator_name))
    406         if force_all_finite:
--> 407             _assert_all_finite(array)
    408 
    409     shape_repr = _shape_repr(array.shape)

/usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py in _assert_all_finite(X)
     56             and not np.isfinite(X).all()):
     57         raise ValueError("Input contains NaN, infinity"
---> 58                          " or a value too large for %r." % X.dtype)
     59 
     60 

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').`
`---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
1 clf=邻居。KNeighborsClassifier(4,权重='统一')
---->2模型=clf.配合(X,y)
/usr/local/lib/python3.6/site-packages/sklearn/neights/base.py-in-fit(self,X,y)
759         """
760如果不存在(X,(KDTree,BallTree)):
-->761 X,y=检查X_y(X,y,“csr”,多输出=真)
762
763如果y.ndim==1或y.ndim==2且y.shape[1]==1:
/usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py in check___y(X,y,accept_sparse,dtype,order,copy,force_all_finite,sure_2d,allow_nd,multi_output,sure_min_samples,sure_min_特征,y_numeric,warn_on_dtype,assister)
519 X=检查数组(X,接受稀疏,数据类型,顺序,复制,强制所有有限,
520确保2d,允许nd,确保最小样本,
-->521确保\u最小\u功能、警告\u数据类型、估计器)
522如果多输出:
523 y=检查数组(y,'csr',强制所有有限=真,确保2d=假,
/检查数组中的usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py(数组、接受稀疏、数据类型、顺序、复制、强制所有有限、确保2d、允许nd、确保最小样本、确保最小特征、警告数据类型、估计器)
405%(array.ndim,估计器名称))
406如果力是有限的:
-->407断言所有有限(数组)
408
409 shape_repr=_shape_repr(array.shape)
/usr/local/lib/python3.6/site-packages/sklearn/utils/validation.py in_assert_all_finite(X)
56而不是np.isfinite(X.all()):
57提升值错误(“输入包含NaN,无穷大”
--->58“或对于%r.%X.dtype而言太大的值)
59
60
ValueError:输入包含NaN、无穷大或对数据类型('float64')太大的值`

查找出现无限值的值:

np.where(~np.isfinite(X)) (array([ 0, 0, 1, ..., 4918675, 4918676, 4918676]), array([3, 5, 3, ..., 5, 3, 5]))
例如,这告诉您第0行第3列中有一个错误的值。这将是
newdf.ix[0,'formsubmit']
。该值是什么,它的类型是什么?一旦您知道了,您应该能够找出需要做什么来替换它

学分:
马克·迪金森(Mark Dickinson)

什么是无限值?
np.isfinite
对于有限值而不是无限值是
True
。eff…你是对的!但是我仍然得到
值错误:输入包含NaN、无穷大或对于数据类型('float64')太大的值:他们创建了一个新的数据框。看起来除了打印数据框之外,您没有对该数据框做任何操作。我只是将它们分配给了一个变量。仍然获得
值错误
请更新问题以准确显示您使用的步骤顺序(最好不要作为屏幕截图)。