使用预先分配的内存向数据帧添加行?

时间:2017-09-21 14:09:18

标签: julia

假设我有一个预先调整大小的数据框,我想为每一行分配值。 (Therfore 推!追加!不在游戏中)

length = 10
df = DataFrame(id = Array(Int64,length),value = Array(String,length))

for n in 1:10
             df[n,:id] = n
             df[n,:value] = "random text"
end

上面的代码显示了如何逐个单元格为每个迭代行执行此操作。

是否有针对每次迭代添加整行的解决方案? 因为

for n in 1:10
             df[n] = [n "random text"]
end

抛出错误的类型异常。

2 个答案:

答案 0 :(得分:1)

要访问行,语法为[row,:],而不仅仅是行。

此外,您还需要先将行转换为DataFrame。

for n in 1:10
    df[n,:] = DataFrame([n "random text2"])
end

答案 1 :(得分:0)

您可以使用自己的功能轻松设置行:

julia> function setrow!(df, rowi, val)                                                                                                      
           for j in eachindex(val)  
               df[rowi, j] = val[j] 
           end                      
           df                                                                                                                       
       end                          
setrow! (generic function with 1 method)

julia> setrow!(df, 1, [1, "a"])
10×2 DataFrames.DataFrame
│ Row │ id              │ value    │
├─────┼─────────────────┼──────────┤
│ 1   │ 1               │ "a"      │
│ 2   │ 140525709817424 │ "#undef" │
│ 3   │ 140525709817488 │ "#undef" │
│ 4   │ 140525709817072 │ "#undef" │
│ 5   │ 140525709817104 │ "#undef" │
│ 6   │ 140525709817136 │ "#undef" │
│ 7   │ 140525709817168 │ "#undef" │
│ 8   │ 140525709817200 │ "#undef" │
│ 9   │ 140525709817232 │ "#undef" │
│ 10  │ 0               │ "#undef" │

理想情况下,您可以使用广播分配语法:

df[2, :] .= [2, "b"]

但这似乎没有实施(也许是有充分理由的,我不确定)。