为分数设置 KNN

Set up a KNN for a score

我尝试使用 KNN 在“分数”列中填充 nan(基于 X_100g、Y_100g 和 Z_100g.

列中的值

这是我的 df:

Product_Name   brand   score    X_100g    Y_100g    Z_100g
PA              abc      a        40        45         na
PB              def      b        27        27          8
PC              ghi      na       78        na         56
PD              klm      c        na        29         29
PE              nop      b        57         3         76
PF              qrs      na       45        42         33

我试过的是:

imputer = KNNImputer(n_neighbors=5)
dataknn = imputer.fit_transform(data.filter("score"))

似乎由于错误而无法运行:

ValueError: at least one array or dtype is required

谁能帮我解决这个问题?

谢谢!

我试图更改我的初始代码:

imputer = SimpleImputer(strategy = "most_frequent")
dataimputed = imputer.fit_transform(data.filter(["score"]))

因此出现以下错误:“ValueError:无法从重复轴重新索引”

错误一:

df.filter('score') returns 一个空数据框。

这是因为 Pandas 需要一个类似列表的对象作为 'items' 参数(即,您想要 select 的列的名称列表),请参阅 docs。但是,您提供的是 str.

执行 df.filter(['score']) 或仅执行 df['score'] 以将 'score' 列提取为数据框。

错误二:

您正在对分类变量使用 KNNImputer,这是不可能的,因为它仅适用于数字数据。

相反,将 SimpleImputer(或 IterativeImputer)与 'most_frequent''constant' 策略一起使用 – 这些策略适用于分类数据。

如果您真的想使用 KNNImputer,请先对 'score' 列进行编码,估算空值,然后再转换回来。