當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PySpark Column isNull方法用法及代碼示例


PySpark 列的isNull() 方法標識值為空的行。

返回值

PySpark 列 (pyspark.sql.column.Column)。

例子

考慮以下PySpark DataFrame:

df = spark.createDataFrame([["Alex", 25], ["Bob", 30], ["Cathy", None]], ["name", "age"])
df.show()



+-----+----+
| name| age|
+-----+----+
| Alex|  25|
|  Bob|  30|
|Cathy|null|
+-----+----+

識別 PySpark DataFrame 中某些值為空的行

要識別 age 值為 null 的行:

df.select(df.age.isNull()).show()



+-----------------+
|(age IS NOT NULL)|
+-----------------+
|             true|
|             true|
|            false|
+-----------------+

獲取 PySpark DataFrame 中某些值為空的行

要獲取 age 值為 null 的行:

df.where(df.age.isNull()).show()



+-----+----+
| name| age|
+-----+----+
|Cathy|null|
+-----+----+

此處, where(~) 方法獲取與isNull() 方法返回的布爾列中的True 對應的行。

警告 - 使用相等性來比較空值

一種常見的錯誤是使用相等性來比較空值。例如,考慮以下 DataFrame:

df = spark.createDataFrame([["Alex", 25.0], ["Bob", 30.0], ["Cathy", None]], ["name", "age"])
df.show()



+-----+----+
| name| age|
+-----+----+
| Alex|25.0|
|  Bob|30.0|
|Cathy|null|
+-----+----+

讓我們獲取 age 等於 None 的行:

from pyspark.sql import functions as F
df.where(F.col("age") == None).show()



+----+---+
|name|age|
+----+---+
+----+---+

請注意 Cathy 的 agenull 的行未被選取。比較 null 值時,我們應該始終使用 isNull() 代替。

空值和 NaN 的處理方式不同

考慮以下PySpark DataFrame:

import numpy as np
df = spark.createDataFrame([["Alex", 25.0], ["Bob", np.nan], ["Cathy", None]], ["name", "age"])
df.show()



+-----+----+
| name| age|
+-----+----+
| Alex|25.0|
|  Bob| NaN|
|Cathy|null|
+-----+----+

此處, age 列包含 NaNnull 。在 PySpark 中,NaNnull 被視為不同的實體,如下所示:

df.where(F.col("age").isNull()).show()



+-----+----+
| name| age|
+-----+----+
|Cathy|null|
+-----+----+

在這裏,請注意 Bob 的 ageNaN 的行沒有被選取。要獲取包含 NaN 的行,請使用 isnan(-) 方法,如下所示:

df.where(F.isnan("age")).show()



+----+---+
|name|age|
+----+---+
| Bob|NaN|
+----+---+

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark Column | isNull method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。