python - StandardScaler -ValueError : Input contains NaN, 无穷大或对于 dtype ('float64' 来说值太大)

标签 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 中的哪个值实际上导致了问题?人们通常如何避免它?

最佳答案

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

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

响应您的编辑:

您可以将 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/

相关文章:

PHP:如何将无穷大或 NaN 数字编码为 JSON?

python 在数组中查找交集时间范围

r - 当向量有多个 NaN 时,如何在 R 中内插/外推?

python - 将 html 兄弟作为单独的项目抓取?

Python 类方法行为异常

javascript - 如何使用 ReactJS 获取总列​​数?

python - Pandas 上的 fiilna() 方法在 axis=1 上调用时忽略就地参数返回错误

python - ffill 不在 pandas dataframe 中填充数据

android - 如何在我的 Android 应用程序(如 SL4A)中集成 Python 脚本

python:无意中修改传递给函数的参数