gpt4 book ai didi

python - Pyspark - 计算每个数据框列中的空值数

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:53 25 4
gpt4 key购买 nike

我有一个包含许多列的数据框。我的目标是生成一个列出每个列名称的数据框,以及该列中空值的数量。

例子:

+-------------+-------------+
| Column_Name | NULL_Values |
+-------------+-------------+
| Column_1 | 15 |
| Column_2 | 56 |
| Column_3 | 18 |
| ... | ... |
+-------------+-------------+

我已经设法像这样获取一列的空值数量:

df.agg(F.count(F.when(F.isnull(c), c)).alias('NULL_Count'))

其中 c 是数据框中的一列。但是,它不显示列的名称。输出是:

+------------+
| NULL_Count |
+------------+
| 15 |
+------------+

有什么想法吗?

最佳答案

您可以使用列表理解遍历 agg 中的所有列,并使用 alias 重命名输出列:

import pyspark.sql.functions as F

df_agg = df.agg(*[F.count(F.when(F.isnull(c), c)).alias(c) for c in df.columns])

但是,这将在一行中返回结果,如下所示:

df_agg.show()
#+--------+--------+--------+
#|Column_1|Column_2|Column_3|
#+--------+--------+--------+
#| 15| 56| 18|
#+--------+--------+--------+

如果您希望将结果放在一列中,您可以使用 functools.reduce 合并 df_agg 中的每一列,如下所示:

from functools import reduce
df_agg_col = reduce(
lambda a, b: a.union(b),
(
df_agg.select(F.lit(c).alias("Column_Name"), F.col(c).alias("NULL_Count"))
for c in df_agg.columns
)
)
df_agg_col.show()
#+-----------+----------+
#|Column_Name|NULL_Count|
#+-----------+----------+
#| Column_1| 15|
#| Column_2| 56|
#| Column_3| 18|
#+-----------+----------+

或者您可以跳过创建 df_agg 的中间步骤并执行:

df_agg_col = reduce(
lambda a, b: a.union(b),
(
df.agg(
F.count(F.when(F.isnull(c), c)).alias('NULL_Count')
).select(F.lit(c).alias("Column_Name"), "NULL_Count")
for c in df.columns
)
)

关于python - Pyspark - 计算每个数据框列中的空值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com