如何替换DataFrame列中的空值?
问题描述:
如何替换 DataFrame df
的 Field1
列中的空值?
How can I replace empty values in a column Field1
of DataFrame df
?
Field1 Field2
AA
12 BB
此命令未提供预期结果:
This command does not provide an expected result:
df.na.fill("Field1",Seq("Anonymous"))
预期结果:
Field1 Field2
Anonymous AA
12 BB
答
Fill: 返回一个新的 DataFrame 替换空值或 NaN 值带值的数字列.
Fill: Returns a new DataFrame that replaces null or NaN values in numeric columns with value.
两件事:
- 空字符串不是 null 或 NaN,因此您必须为此使用 case 语句.
- 将文本值赋予数字列时,Fill 似乎无法正常工作.
失败的空替换为填充/文本:
scala> a.show
+----+---+
| f1| f2|
+----+---+
|null| AA|
| 12| BB|
+----+---+
scala> a.na.fill("Anonymous", Seq("f1")).show
+----+---+
| f1| f2|
+----+---+
|null| AA|
| 12| BB|
+----+---+
工作示例 - 对所有数字使用 Null:
scala> a.show
+----+---+
| f1| f2|
+----+---+
|null| AA|
| 12| BB|
+----+---+
scala> a.na.fill(1, Seq("f1")).show
+---+---+
| f1| f2|
+---+---+
| 1| AA|
| 12| BB|
+---+---+
失败示例(空字符串而不是 Null):
scala> b.show
+---+---+
| f1| f2|
+---+---+
| | AA|
| 12| BB|
+---+---+
scala> b.na.fill(1, Seq("f1")).show
+---+---+
| f1| f2|
+---+---+
| | AA|
| 12| BB|
+---+---+
Case Statement Fix 示例:
scala> b.show
+---+---+
| f1| f2|
+---+---+
| | AA|
| 12| BB|
+---+---+
scala> b.select(when(col("f1") === "", "Anonymous").otherwise(col("f1")).as("f1"), col("f2")).show
+---------+---+
| f1| f2|
+---------+---+
|Anonymous| AA|
| 12| BB|
+---------+---+