Julia DataFrame初始化缺失值列后填充Float值报错如何解决
报错原因
你通过insertcols!(df, :c => missing)初始化新列时,Julia会自动推断该列的元素类型为Missing,该类型的向量仅允许存储missing值,无法容纳Float64类型的数值,因此赋值时会触发类型转换错误。
正确实现方式
方法1:初始化列时直接指定兼容类型
推荐使用DataFrames内置的missings()函数,直接生成同时支持指定数值类型和缺失值的向量:
# 初始化示例DataFrame df = DataFrame(:a => rand(4), :b => rand(4)) # 新增列c,类型为Union{Float64, Missing},初始值全为missing insertcols!(df, :c => missings(Float64, nrow(df))) # 后续赋值可正常运行 for row in eachrow(df) if rand() > 0.5 row[:c] = 1.0 end end
如果不想用missings函数,也可以手动声明类型初始化:
insertcols!(df, :c => Vector{Union{Float64, Missing}}(missing, nrow(df)))
方法2:修改已有纯Missing类型列的元素类型
如果已经完成了纯缺失列的初始化,可以手动转换列类型后再赋值:
# 先转换列类型 df.c = convert(Vector{Union{Float64, Missing}}, df.c) # 再执行赋值操作即可正常运行 for row in eachrow(df) if rand() > 0.5 row[:c] = 1.0 end end
内容的提问来源于stack exchange,提问作者tazzz
相关产品推荐
相关产品推荐

