2016-12-09 3 views
2

如何將第一行上的標題與Julia矩陣轉換爲DataFrame?如何將帶標題的Julia a Matrix(Array {Any,2})轉換爲DataFrame而不會丟失列順序?

我的確讀過這個answer,它涵蓋了同樣的問題,但它在Dict構造函數中給了我一個錯誤。

好吧,我寫我自己的實現(應該工作):

m = [ ['c',1,2] ['a',3,4] ['b',5,6] ] 
3×3 Array{Any,2}: 
    'c' 'a' 'b' 
1  3  5 
2  4  6 
df = convert(DataFrame, Dict([(ch,m[2:end,cix]) for (cix,ch) in enumerate(m[1,:])])) 
2×3 DataFrames.DataFrame 
│ Row │ a │ b │ c │ 
├─────┼───┼───┼───┤ 
│ 1 │ 3 │ 5 │ 1 │ 
│ 2 │ 4 │ 6 │ 2 │ 

但它仍然使用字典等原始列的訂單丟失。我猜測它可能非常慢!

那麼,如何在數據框中使用第一行作爲df標題而不丟失列順序來轉換矩陣?

+0

只需用'OrderedDict(...)'替換'Dict(...)'(OrderedDict在DataStructures中,但可能已經導入,否則先使用DataStructures) –

回答

3

這裏是沒有字典的解決方案:

DataFrame(Any[@view m[2:end, i] for i in 1:size(m, 2)], Symbol.(m[1, :])) 

不過說真的,如果你能忽略標題,並分別加載它,你會得到比Matrix{Any}一個更有效的結構(這裏稍微簡單的代碼) 。

+0

謝謝,它的工作原理...但怎麼樣? – Antonello

+0

如何?也許你可以讓你的問題更具體一些? –

相關問題