2017-05-29 72 views
1

我想對數變換適用於我的數據幀的所有列在朱莉婭:快捷方式轉化數據幀

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

什麼是簡潔的方式來做到這一點?

+0

'log_df =數據幀(圖(X->地圖(日誌中,x),(my_df [X]爲(my_df))),names(my_df))' –

+0

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

+0

這個'colwise(log,my_df)做了日誌,但事後並沒有收集DataFrame(我假設你需要?) –

回答

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

似乎是相當緊湊。但其他意見和答案也很好。這不會在原地進行轉換。要做到這一點,使用:

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

由Bogumił建議(withtout廣播,見下文)。

另外,存在的log(c::DataArray)自動廣播的問題,這使得log.(c::DataArray)返回垃圾:

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

有趣。在Julia 0.6 rc1'log。(my_df [:A])下工作正常(如果我在正確地使用語言設計'log(my_df [:A])'的地方正確地得到它'應該立即折舊)。 –

+0

@BogumiłKamiński打印輸出在'Version 0.7.0-DEV.360'上。 'log。()'更合理。這種不穩定性會減少 –