将值写入Julia中的空dataframe列

将值写入Julia中的空dataframe列,dataframe,julia,Dataframe,Julia,有一个带有一些值的数据帧。我需要向它添加一个空列,这样当信息可用时,我就可以用值填充它的各个单元格。值的类型是预先知道的,例如,让它为Float64,但是如果在初始化期间我将列的内容设置为“missing”,则列的类型也显示为“missing”,并且以后不能在其中写入任何数值。下面是一个说明问题的示例: df = DataFrame(a = 1:3, b = 1.0:3.0) insertcols!(df, 3, :c => missing) df.b[1] = 5.0 # it work

有一个带有一些值的数据帧。我需要向它添加一个空列,这样当信息可用时,我就可以用值填充它的各个单元格。值的类型是预先知道的,例如,让它为Float64,但是如果在初始化期间我将列的内容设置为“missing”,则列的类型也显示为“missing”,并且以后不能在其中写入任何数值。下面是一个说明问题的示例:

df = DataFrame(a = 1:3, b = 1.0:3.0)
insertcols!(df, 3, :c => missing)
df.b[1] = 5.0 # it works
df.c[1] = 7.0 # give an error

在这种情况下,正确的做法是什么?是否需要更改空列初始化方式或在其单元格中记录的方式?

您可以尝试的一种可能方式:

insertcols!(df,  :c => Vector{Union{Float64,Missing}}(missing,nrow(df)))
或:

或如@Milan Bouchet Valat所述的更短:

df[!,:c] = missings(Float64, nrow(df))

为什么你需要它是空的或者里面没有?只是初始化为零?或者制作一个
向量{Union{Missing,Float64}}
,如果你想让它同时包含缺失和floatsinitizing,那么使用零不是一个好主意,因为零也可以是我们需要写下的答案,它作为信息很有价值。如果列中已经填充了零,那么我们将无法区分具有答案的单元格和具有初始值的单元格。如果用“缺失”值初始化单元格,那么我们可以随时请求所有非空单元格的值,并查看所有当前可用的值,包括零。混合使用缺失和浮动进行初始化确实可以解决问题,因为在DataFrames.jl中,旁注
df[:c]
不是有效的语法。推荐的编写方法是
df.c
。更高级的语法是
df[:,:c]
df[!,:c]
(如Przemysław所示),但很少需要它。我的建议是大部分时间都坚持使用
df.c
,这也是最容易键入的。谢谢!接下来,我将遵循推荐的语法,因为我更新了我的示例以匹配现代语法
missings(Float64,nrow(df)
Vector{Union{Float64,Missing}(Missing,nrow(df))
的缩写。
df[!,:c] = missings(Float64, nrow(df))