2017-11-14 1 views
2

Ich habe einen map Anruf, der in einer Reihe von berechneten Werten ergibt, also ich ein Array der Zeilen, die Array von Any, wie dieseWie konvertiere ich ein Array von Arrays in einen Datenrahmen in Julia?

12-element Array{Array{Any,1},1}: 
Any[2015-09-01T00:00:00, 2016-09-01T00:00:00, 98, 53.1] 
Any[2015-10-01T00:00:00, 2016-10-01T00:00:00, 92, 58.7] 
Any[2015-11-01T00:00:00, 2016-11-01T00:00:00, 130, 64.6] 
Any[2015-12-01T00:00:00, 2016-12-01T00:00:00, 135, 67.4] 
Any[2016-01-01T00:00:00, 2017-01-01T00:00:00, 206, 59.2] 
Any[2016-02-01T00:00:00, 2017-02-01T00:00:00, 246, 54.1] 
Any[2016-03-01T00:00:00, 2017-03-01T00:00:00, 254, 53.9] 
Any[2016-04-01T00:00:00, 2017-04-01T00:00:00, 268, 65.7] 
Any[2016-05-01T00:00:00, 2017-05-01T00:00:00, 265, 61.5] 
Any[2016-06-01T00:00:00, 2017-06-01T00:00:00, 303, 52.8] 
Any[2016-07-01T00:00:00, 2017-07-01T00:00:00, 301, 59.1] 
Any[2016-08-01T00:00:00, 2017-08-01T00:00:00, 273, 54.6] 

sind Gibt es eine einfache Möglichkeit, dies in ein DataFrame Drehen, mit Spaltennamen und so weiter? Wenn es keinen einfachen Weg gibt, bin ich offen für härtere Wege :) Ich kann daran denken, map vier Mal zu wiederholen, um die Spalten zu extrahieren und die DataFrame daraus zu bauen, aber das hört sich nach viel Code an eine solche scheinbar banale Betrieb ...

EDIT ich kann „transponieren“ Zeilen in Spalten wie dieser

map(x -> map(y -> y[x], r), collect(1:4) 

wo r die Tabelle oben ist, so nehme ich an eine Lösung Spaltennamen wäre das zu schaffen, DataFrame Konstruktor. Meine temporäre Lösung ist daher

DataFrame(map(x -> map(y -> y[x], r), collect(1:4)), [:a, :b, :c, :d]) 
+1

Die Lösung in der Frage (minus der 'collect') ist ziemlich gut. Wenn generische Spaltennamen in Ordnung sind, dann funktioniert 'DataFrame (hcat (r ...) ')' ebenfalls –

Antwort

1
julia> df 
12-element Array{Array{Any,1},1}: 
Any["2015-09-01T00:00:00", "2016-09-01T00:00:00", 98, 53.1] 
Any["2015-10-01T00:00:00", "2016-10-01T00:00:00", 92, 58.7] 
Any["2015-11-01T00:00:00", "2016-11-01T00:00:00", 130, 64.6] 
Any["2015-12-01T00:00:00", "2016-12-01T00:00:00", 135, 67.4] 
Any["2016-01-01T00:00:00", "2017-01-01T00:00:00", 206, 59.2] 
Any["2016-02-01T00:00:00", "2017-02-01T00:00:00", 246, 54.1] 
Any["2016-03-01T00:00:00", "2017-03-01T00:00:00", 254, 53.9] 
Any["2016-04-01T00:00:00", "2017-04-01T00:00:00", 268, 65.7] 
Any["2016-05-01T00:00:00", "2017-05-01T00:00:00", 265, 61.5] 
Any["2016-06-01T00:00:00", "2017-06-01T00:00:00", 303, 52.8] 
Any["2016-07-01T00:00:00", "2017-07-01T00:00:00", 301, 59.1] 
Any["2016-08-01T00:00:00", "2017-08-01T00:00:00", 273, 54.6] 

julia> DataFrame(permutedims(Array(DataFrame(map(data,df))), [2, 1])) 
12×4 DataFrames.DataFrame 
│ Row │ x1     │ x2     │ x3 │ x4 │ 
├─────┼───────────────────────┼───────────────────────┼─────┼──────┤ 
│ 1 │ "2015-09-01T00:00:00" │ "2016-09-01T00:00:00" │ 98 │ 53.1 │ 
│ 2 │ "2015-10-01T00:00:00" │ "2016-10-01T00:00:00" │ 92 │ 58.7 │ 
│ 3 │ "2015-11-01T00:00:00" │ "2016-11-01T00:00:00" │ 130 │ 64.6 │ 
│ 4 │ "2015-12-01T00:00:00" │ "2016-12-01T00:00:00" │ 135 │ 67.4 │ 
│ 5 │ "2016-01-01T00:00:00" │ "2017-01-01T00:00:00" │ 206 │ 59.2 │ 
│ 6 │ "2016-02-01T00:00:00" │ "2017-02-01T00:00:00" │ 246 │ 54.1 │ 
│ 7 │ "2016-03-01T00:00:00" │ "2017-03-01T00:00:00" │ 254 │ 53.9 │ 
│ 8 │ "2016-04-01T00:00:00" │ "2017-04-01T00:00:00" │ 268 │ 65.7 │ 
│ 9 │ "2016-05-01T00:00:00" │ "2017-05-01T00:00:00" │ 265 │ 61.5 │ 
│ 10 │ "2016-06-01T00:00:00" │ "2017-06-01T00:00:00" │ 303 │ 52.8 │ 
│ 11 │ "2016-07-01T00:00:00" │ "2017-07-01T00:00:00" │ 301 │ 59.1 │ 
│ 12 │ "2016-08-01T00:00:00" │ "2017-08-01T00:00:00" │ 273 │ 54.6 │ 

Ich denke, Ihre Lösung ist viel besser ...!

Verwandte Themen