如何计算Pyspark中的None或NaN值的百分比?

时间:2020-01-29 14:33:05

标签: python apache-spark pyspark data-cleaning data-processing

我在PySpark中有一个较大的数据集,想要计算每列的None / NaN值的百分比,并将其存储在另一个名为percent_missing的数据框中。例如,如果以下是输入数据框:

df = sc.parallelize([
    (0.4, 0.3),
    (None, None),
    (9.7, None), 
    (None, None)
]).toDF(["A", "B"])

我希望输出为一个数据帧,其中“ A”列的值为0.5,而“ B”列的值为0.75。

我正在寻找这样的东西:

for column_ in my_columns:
  amount_missing = df[df[column_] == None].count().div(len(df)) * 100

如果有一个具有执行此功能的函数的库,我也很乐意使用它。

1 个答案:

答案 0 :(得分:1)

以下代码完全符合您的要求:

from pyspark.sql.functions import *

df:

+----+----+
|   A|   B|
+----+----+
| 0.4| 0.3|
|null|null|
| 9.7|null|
|null|null|
+----+----+

# Generic solution for all columns
amount_missing_df = df.select([(count(when(isnan(c) | col(c).isNull(), c))/count(lit(1))).alias(c) for c in df.columns])
amount_missing_df.show()

amount_missing_df:

+---+----+
|  A|   B|
+---+----+
|0.5|0.75|
+---+----+