【发布时间】:2019-12-27 06:17:22
【问题描述】:
我有一个 PySpark 数据框,在多列中包含 Null。我正在尝试用相应列的最大数 + 1 填充空值。想法是在一次热编码后返回并将这些值标记为“无”,以在创建“缺失”时尝试模仿 SAS 中的一个热编码过程" 每个数字分类列的类别。
例如,男性中的'null'应该是'3'。所以,男性列的最大数量 + 1 = 3。然后是 4,其他列是 6。
示例数据:
+----------------+------+-----+-----+
| MS| male| rate|level|
+----------------+------+-----+-----+-
| Married| null| null| 5|
| Married| 1| 2| 2|
| Divorced| 2| 3| null|
+----------------+------+-----+-----+
这是迄今为止我尝试过的一些方法。但它要么不填充空值,要么将“6”填充到所有列中。
null_list = ['male', 'rate', 'level']
descr_dict = {'male': '2', 'rate': '3', 'level': '5'}
for c in spark_data.columns:
if c in null_list:
for key, value in descr_dict.items():
max_val = int(value) + 1
df = spark_data.withColumn(c, F.when((spark_data[c]==key) &
(spark_data[c].isNull())),
F.lit(max_val)).otherwise(spark_data[c]))
预期数据:
+----------------+------+-----+-----+
| MS| male| rate|level|
+----------------+------+-----+-----+-
| Married| 3| 4| 5|
| Married| 1| 2| 2|
| Divorced| 2| 3| 6|
+----------------+------+-----+-----+
【问题讨论】:
标签: python loops dataframe pyspark null