StandardScaler -ValueError:输入包含NaN,无穷大或对于dtype来说太大的值(' float64')

时间:2016-04-10 16:38:53

标签: python nan

我有以下代码

X = df_X.as_matrix(header[1:col_num])
scaler = preprocessing.StandardScaler().fit(X)
X_nor = scaler.transform(X) 

并出现以下错误:

  File "/Users/edamame/Library/python_virenv/lib/python2.7/site-packages/sklearn/utils/validation.py", line 54, in _assert_all_finite
    " or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

我用过:

print(np.isinf(X))
print(np.isnan(X))

给出了下面的输出。这无法告诉我哪个元素有问题,因为我有数百万行。

[[False False False ..., False False False]
 [False False False ..., False False False]
 [False False False ..., False False False]
 ..., 
 [False False False ..., False False False]
 [False False False ..., False False False]
 [False False False ..., False False False]]

有没有办法确定矩阵X中哪个值实际导致问题?一般人们如何避免它?

1 个答案:

答案 0 :(得分:6)

numpy包含针对此类事情的各种逻辑元素测试。

在您的特定情况下,您需要使用isinfisnan

回复您的修改:

您可以将np.isinf()或np.isnan()的结果传递给np.where(),这将返回条件为true的索引。这是一个简单的例子:

import numpy as np

test = np.array([0.1, 0.3, float("Inf"), 0.2])

bad_indices = np.where(np.isinf(test))

print(bad_indices)

然后,您可以使用这些索引替换数组的内容:

test[bad_indices] = -1