使用PySpark插补空值的中值

2024-04-24 07:55:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地完成了我想要的使用平均值输入空值的工作。现在我想对中位数做同样的事情,这里是我成功使用的相同代码,用于刚刚用“中位数”而不是“平均值”更改的平均值:

from pyspark.ml.feature import Imputer
imputer = Imputer(inputCols=df2.columns, outputCols=["{}_imputed".format(c) for c in df2.columns]

Median_Imputer = imputer.setStrategy("median").fit(df2).transform(df2).show()
Median_Imputer

因此,这会打印输出(不会给出错误),但输出是错误的,它实际上不会计算中值,而是输出该列中的最低值,以替换NaN,如图所示:

Name   DateTime  Age   Name_imputed  DateTime_imputed  Age_imputed
NaN    15.0      3.5   0.5           15.0                3.5
15.0   45.0      18.0  15.0          45.0                18.0
0.5     3.5      NaN   0.5           3.5                 3.5

如您所见,姓名栏应插补7.75而不是0.5,因为有2个值,中位数只是它们的平均值,而年龄栏应插补10.75而不是3.5(栏中的最低值)

为什么这不起作用?它在需要的时候起作用。如何解决这个问题

谢谢大家!


Tags: columnsnameagedatetime错误nan平均值median