Kotlin Notebooks:如何用另一列的值替换DataFrame中的空值
解决Kotlin DataFrame中替换指定列空值并保留所有列的问题
针对你的需求,有几种简洁的方法可以实现仅替换name列的null值为age列的值,同时保留所有原有列:
方法1:使用fillNulls的正确语法
Kotlin DataFrame的fillNulls方法支持直接指定目标列,然后通过with传入填充逻辑,这里可以直接引用age列的值:
// 类型安全的列定义(推荐,避免字符串索引的错误) val name by column<String?>() val age by column<Int>() val df = dataFrameOf(name, age)( "Alice", 15, "Bob", 20, null, 100 ) // 填充name列的null值为age列对应的值 val result = df.fillNulls(name).with { age }
如果不想提前定义列,也可以用字符串索引的方式:
val result = df.fillNulls("name").with { it["age"] }
方法2:使用mutate更新列
mutate方法可以在保留所有列的前提下,更新指定列的内容,这里用withDefault指定空值的默认值:
val result = df.mutate { name.withDefault { age } }
方法3:使用update直接修改列
update方法专门用于修改已有列,逻辑更直观:
val result = df.update(name) { it ?: age }
为什么你原来的代码无法运行?
你之前写的df.fillNulls { it["name"] }.with { it["age"] }错误在于,fillNulls的lambda参数不是行对象,而是用于指定要填充的列的选择器,正确的用法是直接传入列(或列名),而不是通过it["name"]返回列。
内容的提问来源于stack exchange,提问作者Soid
相关产品推荐
相关产品推荐

