1. ホーム
  2. apache-spark

[解決済み] PySparkのデータフレームで各列のNullとNanの値の数を効率的に見つけるにはどうしたらいいですか?

2023-07-13 22:22:08

質問

import numpy as np

data = [
    (1, 1, None), 
    (1, 2, float(5)), 
    (1, 3, np.nan), 
    (1, 4, None), 
    (1, 5, float(10)), 
    (1, 6, float("nan")), 
    (1, 6, float("nan")),
]
df = spark.createDataFrame(data, ("session", "timestamp1", "id2"))

期待される出力

各列のnan/nullのカウントを持つデータフレーム

注意 私がスタックオーバーフローで見つけた以前の質問は、null &ではなくnanをチェックするだけです。 それが私が新しい質問を作成した理由です。

私は私が使用することができることを知っている isnull() 関数を使用してSparkカラムのNull値の数を見つけることができますが、SparkデータフレームのNan値を見つけるにはどうすればよいですか?

どのように解決するのですか?

以下の方法で解決できます。 ここで に置き換えて isNullisnan :

from pyspark.sql.functions import isnan, when, count, col

df.select([count(when(isnan(c), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
|      0|         0|  3|
+-------+----------+---+

または

df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
|      0|         0|  5|
+-------+----------+---+