首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查dataframe是否包含空值。

检查dataframe是否包含空值。
EN

Stack Overflow用户
提问于 2019-05-03 06:15:30
回答 3查看 4.5K关注 0票数 4

我有一个dataframe,需要查看它是否包含空值。有很多关于同一主题的文章,但几乎所有的文章都使用count操作或show方法。

在我的例子中,count操作非常昂贵,因为数据量很大。show方法也是如此。

是否有一种方法,当火花遇到第一个空值时,可以要求它查找空值并引发错误?

其他帖子中的解决方案给出了每一列中缺失值的计数。我不需要知道每一列中缺少的值的数量。我只想知道dataframe中是否有空值的单元格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-03 06:22:16

你可以使用limit

代码语言:javascript
运行
复制
df.select("*").where(col("c").isNull()).limit(1)
票数 3
EN

Stack Overflow用户

发布于 2019-05-03 06:59:17

您可能需要遍历所有值并检查空值。这可以通过按列或行的方式遍历dataframe。哪一个是最好的取决于数据(使用启发式)。

逐行遍历:

代码语言:javascript
运行
复制
import pyspark.sql.functions as f
from functools import reduce

df.where(reduce(lambda x, y: x | y, (f.col(x).isNull() for x in df.columns))).limit(1).collect().isEmpty

按列遍历(根据经验,此应该更快,请参见按时钟从注释):

代码语言:javascript
运行
复制
import pyspark.sql.functions as f

contains_nulls = False
for c in df.columns:
  if not df.where(f.col(c).isNull()).limit(1).collect().isEmpty:
    contains_nulls = True
    break

limit(1)用于在找到第一个空值时停止,collect().isEmpty用于检查数据是否为空。

票数 2
EN

Stack Overflow用户

发布于 2019-05-03 06:29:45

据我所知,如果任何列都为null,则您的要求是只升起标志。您不需要知道所有实际行都具有空值。

解决方案:我能想到的最简单的方法就是为您的tempView创建一个DataFrame,并在所有可能的情况下检查null。这是那个的伪码-

代码语言:javascript
运行
复制
YourDF.createOrReplaceTempView("tempView")
tempViewDF = sqlContext.sql("SELECT count(*) FROM tempView WHERE Col1 is null or Col2 is null or col3 is null")

flag=flase

if tempViewDF > 0:
  flag=true

现在使用您想要的标志。

你好,Anupam

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55964196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档