Dataframe 如何将数据帧相乘';使用julia在日志中创建的列?
我有一个数据帧。我想将列“b”乘以一个“log”,然后用0s替换NaN 我怎么能在朱莉娅身上做到这一点? 我正在检查: 但我不明白Dataframe 如何将数据帧相乘';使用julia在日志中创建的列?,dataframe,julia,Dataframe,Julia,我有一个数据帧。我想将列“b”乘以一个“log”,然后用0s替换NaN 我怎么能在朱莉娅身上做到这一点? 我正在检查: 但我不明白 df = DataFrame(a = repeat([1, 2, 3, 4], outer=[2]), b = repeat([2, 1], outer=[4]), c = randn(8)) 我想用“log”乘以“b”列 假设您的意思是要将(自然)log应用于列:b中的每个元素,则可以执行以下操作: log.(df.
df = DataFrame(a = repeat([1, 2, 3, 4], outer=[2]),
b = repeat([2, 1], outer=[4]),
c = randn(8))
我想用“log”乘以“b”列
假设您的意思是要将(自然)log
应用于列:b
中的每个元素,则可以执行以下操作:
log.(df.b)
log(x)
将(自然)日志应用于单个元素x
。通过在日志后添加一个点,您可以在每个元素上使用log
函数
如果要替换列b,请执行以下操作:
df.b=log.(df.b)
然后用0替换NaN
我假设您希望处理出现DomainError
(即取一个负数的log
)的情况。最好是在错误出现之前处理它:
map(x->x使用生成器:
( v <= 0. ? 0. : log(v) for v in df.c )
df[!, :d] .= ( v <= 0. ? 0. : log(v) for v in df.c)
julia> using BenchmarkTools
julia> @btime $df[!, :d] .= ( v <= 0.0 ? 0.0 : log(v) for v in $df.c)
1.440 μs (14 allocations: 720 bytes)
julia> @btime $df[!, :d] .= map( x -> x <= 0.0 ? 0.0 : log(x), $df.c);
1.570 μs (14 allocations: 720 bytes)