Как заменить пустые значения в столбце DataFrame? - PullRequest
0 голосов
/ 09 мая 2018

Как заменить пустые значения в столбце Field1 DataFrame df?

Field1 Field2
       AA
12     BB

Эта команда не дает ожидаемого результата:

df.na.fill("Field1",Seq("Anonymous"))

Ожидаемый результат:

Field1          Field2
Anonymous       AA
12              BB

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы также можете попробовать это. Это может обрабатывать как пустое / пустое / нулевое

df.show()
+------+------+
|Field1|Field2|
+------+------+
|      |    AA|
|    12|    BB|
|    12|  null|
+------+------+

df.na.replace(Seq("Field1","Field2"),Map(""-> null)).na.fill("Anonymous", Seq("Field2","Field1")).show(false)   

+---------+---------+
|Field1   |Field2   |
+---------+---------+
|Anonymous|AA       |
|12       |BB       |
|12       |Anonymous|
+---------+---------+   
0 голосов
/ 09 мая 2018

Fill: возвращает новый DataFrame, который заменяет значения NULL или NaN в числовые столбцы со значением.

Две вещи:

  1. Пустая строка не равна нулю или NaN, поэтому вам придется использовать для этого инструкцию case.
  2. Заполнение, кажется, не работает должным образом при вводе текстового значения в числовой столбец.

Неверный ноль Заменить на заполнение / текст:

scala> a.show
+----+---+
|  f1| f2|
+----+---+
|null| AA|
|  12| BB|
+----+---+

scala> a.na.fill("Anonymous", Seq("f1")).show
+----+---+
|  f1| f2|
+----+---+
|null| AA|
|  12| BB|
+----+---+

Рабочий пример - использование нуля со всеми номерами:

scala> a.show
+----+---+
|  f1| f2|
+----+---+
|null| AA|
|  12| BB|
+----+---+


scala> a.na.fill(1, Seq("f1")).show
+---+---+
| f1| f2|
+---+---+
|  1| AA|
| 12| BB|
+---+---+

Пример сбоя (пустая строка вместо нуля):

scala> b.show
+---+---+
| f1| f2|
+---+---+
|   | AA|
| 12| BB|
+---+---+


scala> b.na.fill(1, Seq("f1")).show
+---+---+
| f1| f2|
+---+---+
|   | AA|
| 12| BB|
+---+---+

Пример исправления выписки по делу:

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|
+---------+---+
...