gpt4 book ai didi

python - 使用 None 值过滤 Pyspark 数据框列

转载 作者:IT老高 更新时间:2023-10-28 21:35:56 27 4
gpt4 key购买 nike

我正在尝试过滤具有 None 作为行值的 PySpark 数据帧:

df.select('dt_mvmt').distinct().collect()

[Row(dt_mvmt=u'2016-03-27'),
Row(dt_mvmt=u'2016-03-28'),
Row(dt_mvmt=u'2016-03-29'),
Row(dt_mvmt=None),
Row(dt_mvmt=u'2016-03-30'),
Row(dt_mvmt=u'2016-03-31')]

我可以用字符串值正确过滤:

df[df.dt_mvmt == '2016-03-31']
# some results here

但这失败了:

df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0

但每个类别肯定都有值(value)。怎么回事?

最佳答案

你可以使用Column.isNull/Column.isNotNull:

df.where(col("dt_mvmt").isNull())

df.where(col("dt_mvmt").isNotNull())

如果你想简单地删除 NULL 值,你可以使用 na.dropsubset 参数:

df.na.drop(subset=["dt_mvmt"])

NULL 的基于相等的比较将不起作用,因为在 SQL 中 NULL 是未定义的,因此任何将其与另一个值进行比较的尝试都会返回 NULL :

sqlContext.sql("SELECT NULL = NULL").show()
## +-------------+
## |(NULL = NULL)|
## +-------------+
## | null|
## +-------------+


sqlContext.sql("SELECT NULL != NULL").show()
## +-------------------+
## |(NOT (NULL = NULL))|
## +-------------------+
## | null|
## +-------------------+

将值与 NULL 进行比较的唯一有效方法是 IS/IS NOT 等效于 isNull/isNotNull 方法调用。

关于python - 使用 None 值过滤 Pyspark 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262762/

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