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

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

<分区>

我在 PySpark 中有一个更大的数据集,我想计算每列 None/NaN 值的百分比并将其存储在另一个名为 percentage_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

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

最佳答案

以下代码完全按照您的要求执行:

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|
+---+----+

关于python - 如何计算 Pyspark 中 None 或 NaN 值的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969378/

相关文章:

python - glob.glob ("**/*.jpg") 作为迭代器还是延迟加载?

python - “bytes”对象不能被解释为整数

python - PySpark DataFrames - 在不转换为 Pandas 的情况下进行枚举的方法?

Spark/scala 中的 SQL 查询大小超过 Integer.MAX_VALUE

java - Spark SQL - 包含列表或数组作为元素的元组的编码器

pyspark - Spark Dataframe 分组和分区键具有一定数量的分区。

python - 在多列上使用 df.withColumn()

python - 如何使用正则表达式拆分列表元素

java - Apache Spark - 数据帧的 datediff?

python - Spark withColumn() 执行幂函数