当前位置: 首页 > 面试题库 >

如何在PySpark DataFrame中删除具有空值的所有列?

贺俊杰
2023-03-14
问题内容

我有一个很大的数据集,我想删除包含null值的列并返回一个新的数据框。我怎样才能做到这一点?

以下内容仅删除包含的单个列或行null

df.where(col("dt_mvmt").isNull()) #doesnt work because I do not have all the columns names or for 1000's of columns
df.filter(df.dt_mvmt.isNotNull()) #same reason as above
df.na.drop() #drops rows that contain null, instead of columns that contain null

例如

a |  b  | c
1 |     | 0
2 |  2  | 3

在上述情况下,它将丢弃整个列,B因为其值之一为空。


问题答案:

这是删除所有具有NULL值的所有列的一种可能的方法,以获取每列NULL值计数代码的源代码。

import pyspark.sql.functions as F

# Sample data
df = pd.DataFrame({'x1': ['a', '1', '2'],
                   'x2': ['b', None, '2'],
                   'x3': ['c', '0', '3'] })
df = sqlContext.createDataFrame(df)
df.show()

def drop_null_columns(df):
    """
    This function drops all columns which contain null values.
    :param df: A PySpark DataFrame
    """
    null_counts = df.select([F.count(F.when(F.col(c).isNull(), c)).alias(c) for c in df.columns]).collect()[0].asDict()
    to_drop = [k for k, v in null_counts.items() if v > 0]
    df = df.drop(*to_drop)
    return df

# Drops column b2, because it contains null values
drop_null_columns(df).show()

之前:

+---+----+---+
| x1|  x2| x3|
+---+----+---+
|  a|   b|  c|
|  1|null|  0|
|  2|   2|  3|
+---+----+---+

后:

+---+---+
| x1| x3|
+---+---+
|  a|  c|
|  1|  0|
|  2|  3|
+---+---+

希望这可以帮助!



 类似资料:
  • 我有以下矩阵: 我只想删除id为3的行。请注意,当我使用时,它仍然保留,因为id本身是唯一的。

  • 我试图递归删除JSON对象和所有子对象中的空值。如果子对象的关键点都已删除,则我希望该子对象也被删除。 比如。 应该变成这样: 下面是我编写的删除所有空值键的函数: 但这不会删除没有子项的父项: 因此,我得到的不是上面的结果,而是: 如您所见,它不会删除申请人的密钥。我如何在函数中检查它?或者它是否需要编写在我调用delKeys()后调用的单独函数中? 还有,有人看到这达到了最大递归深度吗?我尝试

  • 问题内容: 我以为那不是难事,但我想用String.replaceAll删除所有空行(或Java中仅包含空白和制表符的行)。 我的正则表达式如下所示: 但这是行不通的。 我环顾四周,但仅发现用于删除空白行而不包含空格或制表符的正则表达式。 问题答案: 试试这个: 请注意,正则表达式匹配空格,制表符或管道字符! 编辑 顺便说一句,正则表达式也可以解决问题。

  • 问题内容: 如何删除python字符串中的所有空格?例如,我希望将一个字符串转换为,但是我似乎无法通过以下方式完成此操作: 问题答案: 利用没有sep参数的str.split的行为: 如果只想删除空格而不是所有空格: 过早优化 尽管效率不是主要目标(编写清晰的代码是),但以下是一些初始时间: 请注意,正则表达式已缓存,因此它没有您想象的那么慢。编译事前帮助一些,但在实践中,如果你把这个只会重要 很

  • 问题内容: 我可以这样设置一个cookie: 我可以用删除它 但是,如何删除所有cookie? 问题答案: 好的,显然这可能不是最好的解决方案,但是我找到了一种解决方法: 但是,如果有更好的解决方案,我仍然感激不尽。我真的很好奇为什么没有内置方法… 需要安装 ngCookies 模块。 编辑 在1.4版本中,已弃用。相反,您可以使用服务。使用获取所有cookie,并使用删除每个cookie 。

  • 问题内容: 如何使用Java SE从txt文件中删除所有空格和空行? 输入: 输出: 谢谢! 问题答案: 这样的事情怎么样: 注意-未经测试,可能不是完美的语法,但可以为您提供一个思路/方法。 请参阅以下JavaDocs以作参考: http //download.oracle.com/javase/7/docs/api/java/io/FileReader.html http://download