如何在 DataFrame 中用空值替换数字?
Posted
技术标签:
【中文标题】如何在 DataFrame 中用空值替换数字?【英文标题】:How can I replace numbers by nulls in a DataFrame? 【发布时间】:2016-02-23 20:12:07 【问题描述】:这可能很奇怪,但我想知道如何使用Scala
替换null
的任意数量的整个DataFrame
的Column
。
假设我有一个可以为空的 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)
替换为其他一些逻辑表达式(isIn
、not(isIn)
等)。
@AlbertoBonsanto 我可以花点时间吗?
如果是这样,让我们切换到聊天:chat.***.com/rooms/103319/…以上是关于如何在 DataFrame 中用空值替换数字?的主要内容,如果未能解决你的问题,请参考以下文章
如何从列类型列表中删除 pandas DataFrame 中的空值