Pyspark Как обновить все нулевые значения из всех столбцов в фрейме данных?

#apache-spark #pyspark #apache-spark-sql #pyspark-dataframes

#apache-spark #apache-spark-sql #pyspark

Вопрос:

У меня ниже DF с нулевыми значениями в некоторых столбцах.

Теперь мне нужно обновить / заменить эти «нулевые» значения на «NA»

  ------- ------ ----- ------ ---- 
|Product|Canada|China|Mexico| USA|
 ------- ------ ----- ------ ---- 
| Orange|  null| 4000|  null|4000|
|  Beans|  null| 1500|  2000|1600|
| Banana|  2000|  400|  null|1000|
|Carrots|  2000| 1200|  null|1500|
 ------- ------ ----- ------ ---- 
  

Я нашел метод ‘fillna’ для замены нулевого значения

однако мне нужно обновить / заменить все столбцы, имеющие нулевые значения

Итак, что-то вроде этого или лучший способ

 replaced = df.fillna({str(col):'NA', col for col in df.columns})
  

Ценю любую помощь, чтобы найти правильный подход

Спасибо

Комментарии:

1. Каков тип данных этих столбцов (кроме product)? Можете ли вы добавить схему?

Ответ №1:

Вам нужно использовать subset() и передавать имя столбца в порядке заполнения нулевыми значениями

df = df.fillna(0, subset=['Canada', 'China', 'Mexico', 'USA'])

или, в случае, если вы хотите использовать fillna() для всех столбцов, передайте их в a dictionary , также вы можете указать свой выбор 🙂

df = df.fillna({'Canada':'4', 'China': '5', 'Mexico' : '6', 'USA': '7})

Или вы можете просто использовать ниже, чтобы заполнить все столбцы нулевыми значениями

df = df.fillna("a_value")

Комментарии:

1. Привет @ dsk .. я перепробовал все, что вы предложили, но ни один из них не выдал ожидаемый результат.. он все еще перенастраивался с нулевым значением

2. Можете ли вы попробовать преобразовать в StringType и заполнить na. и проверить

3. дайте мне знать, пожалуйста, где я должен преобразовать в строку…

4. df = df.withColumn(«Канада», F.col(Канада).cast(T.StringType())) — попробуйте это