用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列第一行包含
缺少的
,则必须在代码中添加一个特例。您完全正确。这实际上可能是这种方法的一个好处,因为它给用户留下了灵活性。