用空值替换空字符串

Posted

技术标签:

【中文标题】用空值替换空字符串【英文标题】:Replace empty string with Null Values 【发布时间】:2020-07-21 11:50:14 【问题描述】:

我有一个数据框,其列 TotalCharges 是字符串类型,它有一些空值,我希望打印 null 而不是那些空格。

现在列

**************
|1671.6                           |
|8003.8                           |
|680.05                           |
|6130.85                          |
|1415                             |
|6201.95                          |
|                                 |
|74.35                            |
|6597.25                          |

预期输出

|1671.6                           |
|8003.8                           |
|680.05                           |
|6130.85                          |
|1415                             |
|6201.95                          |
|Null                             |
|74.35                            |
|6597.25                          |

【问题讨论】:

您能告诉我们您为实现这一目标所做的努力吗?你有什么问题吗? 我试过 df.na.replace(Seq("TotalCharges"),Map(" "->"Null")) Df.withColumn("TotalCharges", when($"TotalCharges" !==, $"TotalCharges")) 我已经尝试了这两个查询,但我仍然得到一个空字符串 【参考方案1】:

当 String 为 "" 时,以下方式将为您提供列的 null

df.withColumn("TotalCharges",when($"TotalCharges"!=="",$"TotalCharges"))

这将为您提供“Null”字符串:

df.withColumn("TotalCharges",when($"TotalCharges"==="","Null").otherwise($"TotalCharges"))

【讨论】:

这两个都不起作用,我仍然可以看到空白处。 TotalCharges 列是字符串列,要不要先转成整数?【参考方案2】:

你可以试试这样的:

import org.apache.spark.sql.functions.when,lit, _
df.withColumn("TotalCharges", when(col("name") === lit(""), null).otherwi
se(col("TotalCharges")))

【讨论】:

这将打印 Null 值来代替空字符串? 不要认为列类中有then() 方法,但这应该可以工作:df.withColumn("TotalCharges", when(col("TotalCharges") == "", None).else(col("TotalCharges")) 对不起,是的,我忘记了语法;我纠正了它已经有一段时间了 :1:错误:需要标识符,但找到了“else”。 df.withColumn("TotalCharges", when(col("TotalCharges") == "", None).else(col("TotalCharges")) 复制粘贴我的答案,否则应该使用

以上是关于用空值替换空字符串的主要内容,如果未能解决你的问题,请参考以下文章

数据帧到 RDD[Row] 用空值替换空间

IOS,如何在数组中的 dic 中循环 dic 以替换空字符串的空值

如何使用scala在Apache spark中用空字符串(“”)替换空值[重复]

如何用函数链中的空字符串替换数据库中的空值

Rails 3.2:用json序列化中的空字符串替换空值

用空字符串替换字典数组中的 NSNull 值