假设我有一个预先调整大小的数据框,我想为每一行分配值。 (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
抛出错误的类型异常。
答案 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"]
但这似乎没有实施(也许是有充分理由的,我不确定)。