2014-10-05 12 views
21

Sto provando il modulo Julia DataFrames. Mi interessa quindi posso usarlo per tracciare semplici simulazioni in Gadfly. Voglio essere in grado di aggiungere iterativamente le righe al dataframe e voglio inizializzarlo come vuoto.julia crea un dataframe vuoto e aggiunge righe ad esso

Le esercitazioni/documentazione su come eseguire questa operazione sono scarse (la maggior parte della documentazione descrive come analizzare i dati importati).

da aggiungere a un dataframe non vuoto è semplice:

df = DataFrame(A = [1, 2], B = [4, 5]) 
push!(df, [3 6]) 

Ciò restituisce.

3x2 DataFrame 
| Row | A | B | 
|-----|---|---| 
| 1 | 1 | 4 | 
| 2 | 2 | 5 | 
| 3 | 3 | 6 | 

Ma per un init vuoto ottengo errori.

df = DataFrame(A = [], B = []) 
push!(df, [3, 6]) 

Messaggio di errore:

ArgumentError("Error adding 3 to column :A. Possible type mis-match.") 
while loading In[220], in expression starting on line 2 

Qual è il modo migliore per inizializzare un vuoto Julia dataframe tale che si può iterativamente aggiungere elementi in un secondo momento in un ciclo?

+0

non ho potuto riprodurre questo messaggio di errore nel DataFrames v. 0.7.4 su Julia 0.4.5. – esel

risposta

24

Un array di lunghezza zero definito utilizzando solo [] mancherà di informazioni sul tipo sufficienti.

julia> typeof([]) 
Array{None,1} 

Quindi per evitare questo problema è semplicemente indicare il tipo.

julia> typeof(Int64[]) 
Array{Int64,1} 

E si può applicare tale al vostro problema dataframe

julia> df = DataFrame(A = Int64[], B = Int64[]) 
0x2 DataFrame 

julia> push!(df, [3 6]) 

julia> df 
1x2 DataFrame 
| Row | A | B | 
|-----|---|---| 
| 1 | 3 | 6 | 
+9

E la situazione in cui sai quanto grande sarà il DataFrame? È più efficace inizializzarlo in anticipo? Ad esempio 'DataFrame (Int64, 1000, 10)' Quindi qual è la sintassi per il popolamento di ogni riga durante l'iterazione? – bjmc

Problemi correlati