Julia 替换Juila中缺少的值
我让数据框包含一些缺失值,我想用LoanAmount列的平均值替换所有缺失值Julia 替换Juila中缺少的值,julia,Julia,我让数据框包含一些缺失值,我想用LoanAmount列的平均值替换所有缺失值 df[ismissing.(df.LoanAmount),:LoanAmount]= floor(mean(skipmissing(df.LoanAmount))) 但是当我运行上述代码时,我得到了 MethodError: no method matching setindex!(::DataFrame, ::Float64, ::BitArray{1}, ::Symbol) 使用skipmissing,例如:
df[ismissing.(df.LoanAmount),:LoanAmount]= floor(mean(skipmissing(df.LoanAmount)))
但是当我运行上述代码时,我得到了
MethodError: no method matching setindex!(::DataFrame, ::Float64, ::BitArray{1}, ::Symbol)
使用
skipmissing
,例如:
mean(skipmissing(df.LoanAmount))
对第二个已编辑问题的回答:您应该使用点运算符(
)广播作业,如下例所示:
julia> df = DataFrame(col=rand([missing;1:3],10))
10×1 DataFrame
│ Row │ col │
│ │ Int64? │
├─────┼─────────┤
│ 1 │ missing │
│ 2 │ 3 │
│ 3 │ 2 │
│ 4 │ 2 │
│ 5 │ missing │
│ 6 │ missing │
│ 7 │ missing │
│ 8 │ 3 │
│ 9 │ 1 │
│ 10 │ 3 │
julia> df[ismissing.(df.col),:col] .= floor(mean(skipmissing(df.col)));
julia> df
10×1 DataFrame
│ Row │ col │
│ │ Int64? │
├─────┼────────┤
│ 1 │ 2 │
│ 2 │ 3 │
│ 3 │ 2 │
│ 4 │ 2 │
│ 5 │ 2 │
│ 6 │ 2 │
│ 7 │ 2 │
│ 8 │ 3 │
│ 9 │ 1 │
│ 10 │ 3 │
Impute.jl
另一种选择是使用Bogumil建议的Impute.jl
:
Impute.fill(df;value=(x)->floor(mean(x)))
我也发现了这个,
当我们需要用平均值替换时
replace!(df.col,missing => floor(mean(skipmissing(df[!,:col]))))
当我们需要替换为模式时
replace!(df.col,missing => mode(skipmissing(df[!,:col])))
您可以使用Impute.jl软件包来实现您的目标。@泽山,请不要编辑问题来提出完全不同的问题。普泽米斯劳的回答显然是正确的,如果不看编辑历史,现在看起来相当奇怪。可能根本不需要再问第二个后续问题。@Bogumil,我想用mean和mod替换缺失的值,但无法做到这一点,我尝试使用impute软件包,但正在使用插值来处理缺少的值。
impute.fill
默认使用mean
,因此如果需要mean
,则不必指定它(假设有一个浮点列)。