【发布时间】:2020-04-28 05:13:24
【问题描述】:
我创建了以下代码,当所有列都是数字数据类型时,它的工作方式就像我想要的那样,它的输入参数是原始数据帧和我想要的数据帧的插补方法,具体取决于我指定的数据帧,它的输出是数据帧估算数据:
def Imputation(df, method):
if method == 'median':
imputer = Imputer(inputCols=df.columns, outputCols=["{}_imputed".format(c) for c in df.columns])
Median_Imputer = imputer.setStrategy("median").fit(df).transform(df)
cols = [c for c in Median_Imputer.columns if c.lower()[-7:] == 'imputed']
Median_Imputer = Median_Imputer[cols]
return Median_Imputer
elif method == 'mean':
imputer = Imputer(inputCols=df.columns, outputCols=["{}_imputed".format(c) for c in df.columns])
Mean_Imputer = imputer.setStrategy("mean").fit(df).transform(df)
cols = [c for c in Mean_Imputer.columns if c.lower()[-7:] == 'imputed']
Mean_Imputer = Mean_Imputer[cols]
return Mean_Imputer
else:
return None
但是,只要我的任何列不是数字,此代码就会失效。对于非数字列,我想为每个空值估算值“缺失”。
我创建的以下代码可以为所有列填充“缺失”的空值:
df.select([(when(isnan(c) | col(c).isNull(), "missing").otherwise(df[c])).alias(c) for c in df.columns]).show()
但是它对所有数字和字符串类型的列都执行此操作。如何将最后一行代码与我的上述函数合并,以便我可以涵盖这两种情况,使用数字列的中值/平均值进行估算以及为所有字符串列填写“缺失”? imputer 函数似乎同时对所有列进行了估算,所以我不确定如何迭代(或以其他方式进行)以合并两者?
谢谢!
【问题讨论】:
标签: python pyspark pyspark-sql imputation pyspark-dataframes