cpg*_*pgj 3 dataframe julia dataframes.jl
我正在构建一个数据框,其中对于某些列,创建它们的明显方法涉及多步骤过程。我想用 eltype Union{Missing, T} 惯用且简洁地创建一个列。然后我可以使用多步骤过程填充该列(并在完成后酌情禁止)。最干净的方法是什么?
我想做类似的事情df[!, :col] :: Vector{Union{Int64, Missing}} .= missing但这给了"ArgumentError: column name :col not found in the data frame; ..."
如果我尝试去做df[!, :col] .= fill(missing, nrow(df)) :: Vector{Union{Int64, Missing}},我就会得到"TypeError: in typeassert, expected Vector{Union{Missing, Int64}}, got a value of type Vector{Missing}"。
目前我正在做一些丑陋且令人困惑的事情,比如
df[!, :col] .= 0
allowmissing!(df, :col)
df.col .= missing
有什么建议么?我的感觉是,如果我有这个问题,我并不真正理解 DataFrames.jl 中的列类型如何工作的细微差别,即使我一直使用它并且通常没有问题。我搜索了文档,但感觉没有看到任何有助于解决此特定问题的内容,但任何推荐的阅读都将不胜感激。
谢谢!
这是一种方法(还有其他选项如何将列添加到数据框,但要使用的关键函数是missings):
julia> using DataFrames\n\njulia> df = DataFrame()\n0\xc3\x970 DataFrame\n\njulia> df.col = missings(Int, 5)\n5-element Vector{Union{Missing, Int64}}:\n missing\n missing\n missing\n missing\n missing\n\njulia> df\n5\xc3\x971 DataFrame\n Row \xe2\x94\x82 col\n \xe2\x94\x82 Int64?\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 missing\n 2 \xe2\x94\x82 missing\n 3 \xe2\x94\x82 missing\n 4 \xe2\x94\x82 missing\n 5 \xe2\x94\x82 missing\n\njulia> df.other_col = missings(Float64, nrow(df))\n5-element Vector{Union{Missing, Float64}}:\n missing\n missing\n missing\n missing\n missing\n\njulia> df\n5\xc3\x972 DataFrame\n Row \xe2\x94\x82 col other_col\n \xe2\x94\x82 Int64? Float64?\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 missing missing\n 2 \xe2\x94\x82 missing missing\n 3 \xe2\x94\x82 missing missing\n 4 \xe2\x94\x82 missing missing\n 5 \xe2\x94\x82 missing missing\nRun Code Online (Sandbox Code Playgroud)\n附带说明一下 - 这个问题与 DataFrames.jl 无关,但与 Julia 中向量的创建方式有关。该missings函数在 Missings.jl 包中定义(由 DataFrames.jl 重新导出)。如果您只想使用 Julia Base 功能,那么以下内容将与使用相同missings:
julia> Vector{Union{Int, Missing}}(missing, 5)\n5-element Vector{Union{Missing, Int64}}:\n missing\n missing\n missing\n missing\n missing\nRun Code Online (Sandbox Code Playgroud)\n(但是,由于它更详细,我通常使用该missings函数)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |