2017-09-21 28 views
2

比方說,我有一個預先大小的數據幀,我想爲每一行分配值。 (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 

拋出一個錯誤的類型異常。

回答

1

要訪問一行,語法是[row,:]而不是僅行。

您還需要先將行轉換爲DataFrame。

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

使用此解決方案時,需要注意DataFrame中的列排序。 –

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"] 

但似乎沒有實施(也許有充分的理由,我不確定)。