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

标签 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

最佳答案

要预分配数据框,您必须预分配其列。您可以创建三列全是 missing只需执行 [fill(missing, 10000) for _ in 1:3] 即可获得值,但这实际上根本没有分配任何东西,因为这些向量只能保存一个值 — missing — 因此以后不能更改它们以保存其他值。一种方法是使用 to Vector可以容纳 Missing 的构造函数或 Float64 :

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 - 这将有明显更好的性能。
(此答案已被编辑以反射(reflect) DataFrames v1.0 语法)

关于julia - 在 Julia 中预分配已知大小的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666466/

相关文章:

iterator - 是否有用于从 julia 中的类似生成器的函数创建快速迭代器的宏?

camera - 实时摄像头输入到 Julia-lang

julia - 如何通过 0.7.0 将此类型定义升级到 Julia 1.x?

python - Julia 中的任意精度算术

matrix - 在 Julia 中构造随机正交矩阵序列

Julia plotly

arrays - (Julia) 快速对数组进行按列求和

julia - 如何在 Julia 中初始化高阶张量?

recursion - 在 Julia 中理解没有基本情况的递归

dataframe - 在 Julia 中获取数据框的名称