如何在Julia中将带有标题的矩阵(数组{Any,2})转换为DataFrame而不会丢失列顺序?

时间:2016-12-09 15:31:58

标签: dataframe julia

如何将带有第一行标题的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标头来转换数据帧中的矩阵?

1 个答案:

答案 0 :(得分:3)

这是一个没有字典的解决方案:

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

但实际上,如果你可以跳过标题并单独加载它,你会获得比Matrix{Any}更有效的结构(这里的代码稍微简单一些)。