用Julia数据帧中以前的值替换缺少的值
假设我有一个如下所示的数据框: 我想做的是用以前的值填充那些缺失的值,因此填充后数据框将如下所示:用Julia数据帧中以前的值替换缺少的值,julia,Julia,假设我有一个如下所示的数据框: 我想做的是用以前的值填充那些缺失的值,因此填充后数据框将如下所示: 有什么简单的方法可以做到这一点吗?使用快速for循环就可以了。也许把它包装成一个函数是有用的 using DataFrames df = DataFrame(a = [1, missing, 2], b = [3, missing, 4]) previous = 0 for c in 1:ncol(df), r in 1:nrow(df) if !ismissing(df[r, c]
有什么简单的方法可以做到这一点吗?使用快速for循环就可以了。也许把它包装成一个函数是有用的
using DataFrames
df = DataFrame(a = [1, missing, 2], b = [3, missing, 4])
previous = 0
for c in 1:ncol(df), r in 1:nrow(df)
if !ismissing(df[r, c])
previous = df[r,c]
else
df[r,c] = previous
end
end
julia> df
3×2 DataFrame
│ Row │ a │ b │
│ │ Int64? │ Int64? │
├─────┼────────┼────────┤
│ 1 │ 1 │ 3 │
│ 2 │ 1 │ 3 │
│ 3 │ 2 │ 4 │
这是使用Impute.jl执行此操作的方法:
julia> using Impute, DataFrames
julia> df = DataFrame(dt1=[0.2, missing, missing, 1, missing, 5, 6],
dt2=[0.3, missing, missing, 3, missing, 5, 6])
7×2 DataFrame
Row │ dt1 dt2
│ Float64? Float64?
─────┼──────────────────────
1 │ 0.2 0.3
2 │ missing missing
3 │ missing missing
4 │ 1.0 3.0
5 │ missing missing
6 │ 5.0 5.0
7 │ 6.0 6.0
julia> transform(df, names(df) .=> Impute.locf, renamecols=false)
7×2 DataFrame
Row │ dt1 dt2
│ Float64? Float64?
─────┼────────────────────
1 │ 0.2 0.3
2 │ 0.2 0.3
3 │ 0.2 0.3
4 │ 1.0 3.0
5 │ 1.0 3.0
6 │ 5.0 5.0
7 │ 6.0 6.0
您好,除了在我的软件包版本中不支持参数“renamecols”外,此方法有效。你的软件包版本是什么?有没有其他方法来取代这个论点?或者我需要在没有参数的情况下运行它,并删除原始列。请将DataFrams.jl更新为0.22版本。在较旧的版本上
transform(df,names(df)。=>Impute.locf.=>names(df))
应该可以工作(取决于您的DataFrames.jl版本有多旧)。谢谢,另一种方法适用于my Julia:)mapcols(df,Impute.locf)
应该是等效的,并且要短一点。如果some列第一行包含缺少的
,则必须在代码中添加一个特例。您完全正确。这实际上可能是这种方法的一个好处,因为它给用户留下了灵活性。