开发者问题收集

Pyspark 从数据框中的列中删除空值

2017-06-23
43413

我的 Dataframe 如下所示

ID,FirstName,LastName

1,Navee,Srikanth

2,,Srikanth 

3,Naveen,

现在我的问题陈述是我必须删除行号 2,因为 First Name 为空。

我正在使用下面的 pyspark 脚本

join_Df1= Name.filter(Name.col(FirstName).isnotnull()).show()

我收到错误

  File "D:\0\NameValidation.py", line 13, in <module>
join_Df1= filter(Name.FirstName.isnotnull()).show()

TypeError: 'Column' object is not callable

有人可以帮我解决这个问题吗

3个回答

您的 DataFrame FirstName 似乎为空值,而不是 Null 。以下是一些可尝试的选项:-

df = sqlContext.createDataFrame([[1,'Navee','Srikanth'], [2,'','Srikanth'] , [3,'Naveen','']], ['ID','FirstName','LastName'])
df.show()
+---+---------+--------+
| ID|FirstName|LastName|
+---+---------+--------+
|  1|    Navee|Srikanth|
|  2|         |Srikanth|
|  3|   Naveen|        |
+---+---------+--------+

df.where(df.FirstName.isNotNull()).show() #This doen't remove null because df have empty value
+---+---------+--------+
| ID|FirstName|LastName|
+---+---------+--------+
|  1|    Navee|Srikanth|
|  2|         |Srikanth|
|  3|   Naveen|        |
+---+---------+--------+

df.where(df.FirstName != '').show()
+---+---------+--------+
| ID|FirstName|LastName|
+---+---------+--------+
|  1|    Navee|Srikanth|
|  3|   Naveen|        |
+---+---------+--------+

df.filter(df.FirstName != '').show()
+---+---------+--------+
| ID|FirstName|LastName|
+---+---------+--------+
|  1|    Navee|Srikanth|
|  3|   Naveen|        |
+---+---------+--------+

df.where("FirstName != ''").show()
+---+---------+--------+
| ID|FirstName|LastName|
+---+---------+--------+
|  1|    Navee|Srikanth|
|  3|   Naveen|        |
+---+---------+--------+
Rakesh Kumar
2017-06-23

您应该执行以下操作

join_Df1.filter(join_Df1.FirstName.isNotNull()).show

希望这有帮助!

koiralo
2017-06-23

我认为您可能需要的是这个 notnull()

因此,这是您在 csv 文件 my_test.csv 中的输入:

ID,FirstName,LastName
1,Navee,Srikanth

2,,Srikanth

3,Naveen

代码:

import pandas as pd
df = pd.read_csv("my_test.csv")

print(df[df['FirstName'].notnull()])

输出:

  ID FirstName  LastName
0   1     Navee  Srikanth
2   3    Naveen       NaN

这就是您想要的! df[df['FirstName'].notnull()]

df['FirstName'].notnull() 的输出:

0     True
1    False
2     True

这将创建一个数据框 df ,其中 df['FirstName'].notnull() 返回 True

如何检查? df['FirstName'].notnull() 如果 FirstName 列的值不为空,则返回 True ,否则如果存在 NaN ,则返回 False

void
2017-06-23