2017-05-29 4 views
1

Ich mag würde eine Log-Transformation auf alle Spalten meines Datenrahmen in Julia anzuwenden:Verknüpfung zum Transformieren eine Datenrahmen

my_df = DataFrame(A = [1,2], B=[3,4]) 

Was ist eine prägnante Art und Weise, dies zu tun?

+0

'log_df = Dataframe (Karte (x-> Karte (log, x), (my_df [x] für x in Namen (my_df))), Namen (my_df)) ' –

+0

foreach (x -> my_df [x] = log. (my_df [x]), Namen (my_df)) –

+0

Dieses' colwise (log, my_df) ' macht das Protokoll, aber sammelt den DataFrame danach nicht (was ich voraussetze, dass Sie brauchen?) –

Antwort

1
log_df = DataFrame(;Dict(c=>log(my_df[c]) for c in names(my_df))...) 

recht kompakt zu sein scheint. Aber die anderen Kommentare und Antworten sind auch gut. Dies macht die Transformation nicht direkt. Um es zu tun in-place, verwenden:

foreach(x -> my_df[x] = log(my_df[x]), names(my_df)) 

von Bogumił vorgeschlagen (withtout der Sendung, siehe unten).

Zusätzlich gibt es die Frage der log(c::DataArray) automatisch sendet, die log.(c::DataArray) Rückkehr Müll macht:

julia> log(my_df[:A]) 
2-element DataArrays.DataArray{Float64,1}: 
0.0  
0.693147 

julia> log.(my_df[:A]) 
0-dimensional DataArrays.DataArray{Float64,0}: 
0.0 
+1

Interessant. Unter Julia 0.6 rc1 'log. (My_df [: A])' funktioniert richtig (und wenn ich es richtig herbekomme, wo wir mit dem Sprachdesign gehen 'log (my_df [: A])' sollte bald abgeschrieben werden). –

+0

@ BogumiłKamiński Der Ausdruck ist auf 'Version 0.7.0-DEV.360'. 'log.()' ergibt mehr Sinn. Diese Art von Instabilität macht weniger –

Verwandte Themen