如何在PySpark DataFrame中删除具有空值的所有列?
发布于 2021-01-29 18:05:50
我有一个很大的数据集,我想删除包含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
因为其值之一为空。
关注者
0
被浏览
158
1 个回答
-
这是删除所有具有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| +---+---+
希望这可以帮助!