用列表 Pyspark Dataframe 中的值替换 NA
Posted
技术标签:
【中文标题】用列表 Pyspark Dataframe 中的值替换 NA【英文标题】:replacing NA with value from a list Pyspark Dataframe 【发布时间】:2019-10-12 22:05:04 【问题描述】:我有一个包含 20 列的 spark 数据框。我想用它们的平均值替换选定列(数字列)中的 NA 值。
我有一个数字列名称的列表,以及它们的平均值列表。我已经编写了以下函数,但我不确定如何将它应用到 Dataframe
NumColNames=['MinTemp','MaxTemp','Rainfall','WindGustSpeed',\
'WindSpeed9am', 'WindSpeed3pm', 'Humidity9am', 'Humidity3pm', 'Pressure9am','Pressure3pm']
avgLst=[12,33,44,21,132,35,22,11,4,55]
def replaceNaNum(df, NumColNames,avgLst):
#iterate through numerical columns names
for column in NumColNames:
#iterate through the aveagres in avgLst
for avg in avgLst:
#replace each NA value in every column with the corresponding average
df=df.withColumn(column, when(df[column] == 'NA',\
avg).otherwise(df[column]))
return df
感谢任何意见,谢谢
【问题讨论】:
【参考方案1】:你可以在这里使用zip
绑定列名和对应的平均值,然后从单个循环中提取出来:
for column, avg in zip(NumColNames, avgLst):
df = df.withColumn(column, when(df[column] == 'NA',\
avg).otherwise(df[column]))
【讨论】:
以上是关于用列表 Pyspark Dataframe 中的值替换 NA的主要内容,如果未能解决你的问题,请参考以下文章
从 PySpark DataFrame 中的列表列表中删除列表
PySpark Dataframe:将一个单词附加到列的每个值
Spark DataFrame ArrayType 或 MapType 用于检查列中的值
pyspark dataframe foreach 填充列表