我正在尝试使用sklearn.preprocessing.Imputer
替换给定数据集中的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.]])
我应该更改哪些内容,以便取代NaN
而不是取代2.
?
我尝试从sklearn.preprocessing.Imputer
user 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.]])
答案 0 :(得分:2)
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 :(得分:1)
通过重新阅读sklearn.preprocessing.Imputer
axis
,我找到了问题的答案。事实证明,我遗漏了Imputer()
'构造函数的>>> 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.]])
参数。默认情况下,它设置为0(对列应用策略)但我传递了一行数据,所以我应该使用axis = 1.
这是最终结果,正如最初预期的那样。
const matrix = [[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]];
const sumNotUnderZero = (bottom, top) =>
top.map((v, i) => v ? v + bottom[i] : v);
const result = matrix.reduceRight(sumNotUnderZero)
.reduce((s, n) => s + n);
console.log(result);