如何在 DataFrame 中用空值替换数字?

Posted

技术标签:

【中文标题】如何在 DataFrame 中用空值替换数字?【英文标题】:How can I replace numbers by nulls in a DataFrame? 【发布时间】:2016-02-23 20:12:07 【问题描述】:

这可能很奇怪,但我想知道如何使用Scala 替换null 的任意数量的整个DataFrameColumn

假设我有一个可以为空的 DoubleType 列,名为 col。在那里,我想用 null 替换所有不同于 (1.0 ~ 10.0) 的数字。

我尝试了下一个代码并不令人满意。

val xf = df.na.replace("col", Map(0.0 -> null.asInstanceOf[Double]).toMap)

但是,正如您在Scala 中意识到的那样,当您将null 转换为Double 时,它会被表示为0.0,这不是我想要的。此外,我无法实现使用一系列值的任何方法。因此,我在想是否有什么办法可以做到这一点?

【问题讨论】:

na.replace 这里是硬性要求吗? @zero323 不用了,我只是拔毛而已。 【参考方案1】:

when 子句怎么样?

import org.apache.spark.sql.functions.when

val df = sc.parallelize(
  (1L, 0.0) :: (2L, 3.6) :: (3L, 12.0) :: (4L, 5.0) ::  Nil
).toDF("id", "val")

df.withColumn("val", when($"val".between(1.0, 10.0), $"val")).show

// +---+----+
// | id| val|
// +---+----+
// |  1|null|
// |  2| 3.6|
// |  3|null|
// |  4| 5.0|
// +---+----+

任何不满足谓词(此处为val BETWEEN 1.0 AND 10.0)的值都将替换为NULL

另见Create new Dataframe with empty/null field values

【讨论】:

只是将其作为未来的信息性评论。如果你想替换除……以外的其他人,你会怎么做? :) 您可以将$"val".between(1.0, 10.0) 替换为其他一些逻辑表达式(isInnot(isIn) 等)。 @AlbertoBonsanto 我可以花点时间吗? 如果是这样,让我们​​切换到聊天:chat.***.com/rooms/103319/…

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

如何优化 spark 函数以用零替换空值?

如何从列类型列表中删除 pandas DataFrame 中的空值

如何使用布尔掩码在 pandas DataFrame 中用 nan 替换“任何字符串”?

如何在熊猫中用 NaN 替换浮点值?

如何在 Python 中用“”替换我的自定义字符?

informix 在选择中用 0 替换空值