如何将带有第一行标题的Julia矩阵转换为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 :(得分:3)
这是一个没有字典的解决方案:
DataFrame(Any[@view m[2:end, i] for i in 1:size(m, 2)], Symbol.(m[1, :]))
但实际上,如果你可以跳过标题并单独加载它,你会获得比Matrix{Any}
更有效的结构(这里的代码稍微简单一些)。