簡體   English   中英

StandardScaler -ValueError:輸入包含NaN,無窮大或對於dtype('float64')而言太大的值

[英]StandardScaler -ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

我有以下代碼

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(),這將返回條件為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM