2017-06-23 29 views
0

我試圖用列平均值使用sklearn.preprocessing.Imputer替換給定數據集中的NaN值。而不是有NaN取代,而是發現他們正在被我的代碼刪除。下面是一個簡單的例子展示了這個問題,我面對:中期平均策略刪除NaN而不是替換

>>> test_data = np.array([float("NaN"), 1, 2, 3]) 
>>> imp = Imputer(missing_values=float("NaN"), strategy="mean") 
>>> imp.fit_transform(test_data) 
** Deprecation warning truncated ** 
array([[1., 2., 3.]]) 

我應該改變,這樣不是刪除它就會通過2.取代NaN的?

我試圖改編自sklearn.preprocessing.Imputeruser guide,最初是在this answer之後,但我一定誤解了他們。

編輯:

我也曾嘗試以下,這擺脫了棄用警告,但不會改變最終的結果:

>>> test_data = np.array([[float("NaN"), 1, 2, 3]]) 
>>> imp = Imputer(missing_values=float("NaN"), strategy="mean") 
>>> imp.fit_transform(test_data) 
array([[1., 2., 3.]]) 

回答

1

的Imputer預期的數據幀。這工作正常 -

import pandas as pd 
from sklearn.preprocessing import Imputer 

test_series = pd.Series([float("NaN"), 1, 2, 3]) 
test_data_frame = pd.DataFrame({"test_series": test_series}) 
imp = Imputer(missing_values=float("NaN"), strategy="mean") 
test_data_frame = imp.fit_transform(test_data_frame) 
print(test_data_frame) 
+1

有趣的是,這似乎工作而使用numpy的陣列僅僅通過使用列或行,這取決於數據是如何佈置的工作原理我的溶液軸是否被設置爲0或1。 – ApplePie

1

我已經重新讀取documentationsklearn.preprocessing.Imputer找到了答案,我的問題。事實證明,我遺漏了Imputer()'構造函數'的參數axis。默認情況下,它被設置爲0(在列上應用策略),但我傳遞了一行數據,所以我應該使用axis = 1。

這是最初的結果,如預期的那樣。

>>> test_data = np.array([float("NaN"), 1, 2, 3]) 
>>> imp = Imputer(missing_values=float("NaN"), strategy="mean", axis=1) 
>>> imp.fit_transform(test_data) 
array([[2., 1., 2., 3.]])