我有一个pyspark数据帧,我想删除任何至少包含一个NA的行。
我只知道如何对一列执行此操作(下面的代码(。
如何对数据帧的所有列执行相同操作?
可复制示例
# Import modules
from pyspark.sql import SparkSession
from pyspark import SparkContext
from pyspark.sql.functions import col
from pyspark.sql import Row
# Defining SparkContext
SparkContext.getOrCreate()
# Defining SparkSession
spark = SparkSession
.builder
.master("local")
.appName("Introduction au DataFrame")
.getOrCreate()
# Initiating DataFrame
values = [("1","2","3"),
("NA","1", "2"),
("4", "NA", "1")]
columns = ['var1',
'var2',
'var3']
df = spark.createDataFrame(values, columns)
# Initial dataframe
df.show()
+----+----+----+
|var1|var2|var3|
+----+----+----+
| 1| 2| 3|
| NA| 1| 2|
| 4| NA| 1|
+----+----+----+
# Subset rows without NAs (column 'var1')
df.where(~col('var1').contains('NA')).show()
+----+----+----+
|var1|var2|var3|
+----+----+----+
| 1| 2| 3|
| 4| NA| 1|
+----+----+----+
我的预期输出
+----+----+----+
|var1|var2|var3|
+----+----+----+
| 1| 2| 3|
+----+----+----+
我也试过什么
我试过以下方法,但PySpark似乎不像熊猫那样识别NA
它只识别null
值。
df.na.drop().show()
df.select([count(when(isnan('var1'), True))]).show()
df.filter(df['var1'].isNotNull()).show()
new = (df.na.replace({'NA': None})#Replace string NA with null
.dropna()#Drop NA
).show()
试试这个:
df.dropna().show()
您也可以在dropna方法中指定参数:
如果是how = 'any'
,则是您的情况
或how = 'all'
如果所有列都为null,则该行将被删除
默认情况下"any"是什么