从 PySpark DataFrame 中删除 NULL、NAN、空 space
Removing NULL , NAN, empty space from PySpark DataFrame
我在 PySpark 中有一个数据框,其中包含空 space、Null 和 Nan。
我想删除包含其中任何行的行。我尝试了以下命令,但似乎没有任何效果。
myDF.na.drop().show()
myDF.na.drop(how='any').show()
下面是数据框:
+---+----------+----------+-----+-----+
|age| category| date|empId| name|
+---+----------+----------+-----+-----+
| 25|electronic|17-01-2018| 101| abc|
| 24| sports|16-01-2018| 102| def|
| 23|electronic|17-01-2018| 103| hhh|
| 23|electronic|16-01-2018| 104| yyy|
| 29| men|12-01-2018| 105| ajay|
| 31| kids|17-01-2018| 106|vijay|
| | Men| nan| 107|Sumit|
+---+----------+----------+-----+-----+
我错过了什么?怎样处理NULL、Nan或empty spaces才能在实际计算中没有问题?
NaN
(不是数字)具有不同的含义,即 NULL
和空字符串只是一个普通值(可以使用 csv reader 自动转换为 NULL)所以 na.drop
不会匹配这些。
你可以全部转换为null然后删除
from pyspark.sql.functions import col, isnan, when, trim
df = spark.createDataFrame([
("", 1, 2.0), ("foo", None, 3.0), ("bar", 1, float("NaN")),
("good", 42, 42.0)])
def to_null(c):
return when(~(col(c).isNull() | isnan(col(c)) | (trim(col(c)) == "")), col(c))
df.select([to_null(c).alias(c) for c in df.columns]).na.drop().show()
# +----+---+----+
# | _1| _2| _3|
# +----+---+----+
# |good| 42|42.0|
# +----+---+----+
我在 PySpark 中有一个数据框,其中包含空 space、Null 和 Nan。 我想删除包含其中任何行的行。我尝试了以下命令,但似乎没有任何效果。
myDF.na.drop().show()
myDF.na.drop(how='any').show()
下面是数据框:
+---+----------+----------+-----+-----+
|age| category| date|empId| name|
+---+----------+----------+-----+-----+
| 25|electronic|17-01-2018| 101| abc|
| 24| sports|16-01-2018| 102| def|
| 23|electronic|17-01-2018| 103| hhh|
| 23|electronic|16-01-2018| 104| yyy|
| 29| men|12-01-2018| 105| ajay|
| 31| kids|17-01-2018| 106|vijay|
| | Men| nan| 107|Sumit|
+---+----------+----------+-----+-----+
我错过了什么?怎样处理NULL、Nan或empty spaces才能在实际计算中没有问题?
NaN
(不是数字)具有不同的含义,即 NULL
和空字符串只是一个普通值(可以使用 csv reader 自动转换为 NULL)所以 na.drop
不会匹配这些。
你可以全部转换为null然后删除
from pyspark.sql.functions import col, isnan, when, trim
df = spark.createDataFrame([
("", 1, 2.0), ("foo", None, 3.0), ("bar", 1, float("NaN")),
("good", 42, 42.0)])
def to_null(c):
return when(~(col(c).isNull() | isnan(col(c)) | (trim(col(c)) == "")), col(c))
df.select([to_null(c).alias(c) for c in df.columns]).na.drop().show()
# +----+---+----+
# | _1| _2| _3|
# +----+---+----+
# |good| 42|42.0|
# +----+---+----+