在 Julia 中预分配已知大小的数据框

Preallocate a data frame of known size in Julia

当我进行 运行 模拟时,我喜欢初始化一个大的空数组,并在模拟迭代到最后时填充它。我用 res = Array(Real,(n_iterations,n_parameters)) 之类的东西来做到这一点。但是,命名列会很好,我认为这意味着使用 DataFrame。然而,当我尝试执行 res_df = convert(DataFrame,res) 之类的操作时,它会抛出错误。我想要一种比 res_df = DataFrame(a=Array(Real,N),b=Array(Real,N),c=Array(Real,N),....) 的答案更简洁的方法:julia create an empty dataframe and append rows to it

要预分配数据框,您必须预分配它的列。您可以通过简单地执行 [fill(missing, 10000) for _ in 1:3] 来创建充满 missing 值的三列,但这实际上根本不会分配任何东西,因为这些向量 只能 保存一个值— missing — 因此以后无法更改它们以保留其他值。一种方法是使用 to Vector 可以容纳 MissingFloat64:

的构造函数
julia> DataFrame([Vector{Union{Missing, Float64}}(missing, 10000) for _ in 1:3], [:a, :b, :c])
10000×3 DataFrame
   Row │ a         b         c
       │ Float64?  Float64?  Float64?
───────┼──────────────────────────────
     1 │  missing   missing   missing
     2 │  missing   missing   missing
   ⋮   │    ⋮         ⋮         ⋮
 10000 │  missing   missing   missing
                     9997 rows omitted

请注意,这不是 Real,而是使用具体的 Float64——这将有明显更好的性能。

(编辑此答案以反映 DataFrames v1.0 语法)