PySpark: функция fillna не работает даже после приведения типа - PullRequest
0 голосов
/ 17 октября 2018

У меня есть фрейм данных с двумя столбцами, который выглядит следующим образом:

+----+-----+
|type|class|
+----+-----+
|    |    0|
|    |    0|
|    |    0|
|    |    0|
|    |    0|
+----+-----+
only showing top 5 rows

Я пытаюсь заполнить пустые значения произвольной строкой, поэтому я сделал следующее:

df = df.fillna({'type': 'Empty'})

Что снова показывает мне те же результаты:

+----+-----+
|type|class|
+----+-----+
|    |    0|
|    |    0|
|    |    0|
|    |    0|
|    |    0|
+----+-----+
only showing top 5 rows

Так что я искал вокруг и нашел этот пост в stackoverflow, предполагающий, что несовпадающие типы могут вызвать эту проблему, поэтому я сделал:

df = df.withColumn("type", df["type"].cast("string"))
df = df.fillna({'type': 'Empty'})

Я должен отметить, что исходный фрейм данных имеет следующую схему:

StructField(type,StringType,true)

Кроме того, я попытался:

df = df.withColumn("type", when(df["type"] != '', df["type"]).otherwise('Empty'))

, которая работает просто отлично.Я что-то здесь упускаю?fillna не то, что я ищу?

1 Ответ

0 голосов
/ 17 октября 2018

fillna используется для замены нулевых значений, и у вас есть '' (пустая строка) в столбце вашего типа;Чтобы заменить общее значение, вы можете использовать метод na.replace:

df.na.replace('', 'Empty String', 'type').show()
+------------+-----+
|        type|class|
+------------+-----+
|Empty String|    0|
|Empty String|    0|
+------------+-----+

Или:

df.na.replace({'': 'Empty String'}, 'type').show()
+------------+-----+
|        type|class|
+------------+-----+
|Empty String|    0|
|Empty String|    0|
+------------+-----+

Или использовать метод DataFrame.replace, который является псевдонимом для na.replace:

df.replace('', 'Empty String', 'type').show()
+------------+-----+
|        type|class|
+------------+-----+
|Empty String|    0|
|Empty String|    0|
+------------+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...