我有以下代码
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 中的哪个值实际上导致了问题?人们通常如何避免它?
最佳答案
numpy包含针对此类事物的各种逻辑元素测试。
响应您的编辑:
您可以将 np.isinf() 或 np.isnan() 的结果传递给 np.where(),这将返回条件为真的索引。这是一个简单的例子:
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)
然后您可以使用这些索引来替换数组的内容:
测试[bad_indices] = -1
关于python - StandardScaler -ValueError : Input contains NaN, 无穷大或对于 dtype ('float64' 来说值太大),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532497/