使用 Julia 数据框中的列名称控制流程

Aft*_*ray 3 dataframe julia

我正在寻找一种解决方案来处理 Julia 数据框中不存在列名的情况。

更详细地说,假设我有以下数据框和列表:

df = DataFrame(id= "12345", description= rand(5));
err_Li = ["12345"] 
Run Code Online (Sandbox Code Playgroud)

我需要检查id列是否匹配,err_Li例如:

if (df[1,"id"] in err_Li)
    println("NOT VALID")
else 
end
Run Code Online (Sandbox Code Playgroud)

但是,在我的一些数据框中,列名id不存在。所以在Python中,我可以处理try-except诸如:

try :
    if df['id'][0] in err_Li:
        print('err')
    else: pass

except : pass
Run Code Online (Sandbox Code Playgroud)

当 Julia 数据框中不存在列名或者 Python 中是否有等效函数时,如何控制流程try-except

sun*_*ica 5

由于您知道并期望某些数据帧不会包含此列,因此在这种情况下通常最好使用普通控制流 ( if- else)。应为特殊情况保留例外。

在这种情况下,您可以在语句中添加额外的条件if,如下所示:

julia> df = DataFrame(id= "12345", description= rand(5));

julia> if columnindex(df, :id) > 0 && df[1, :id] in err_Li
           println("NOT VALID")
       end
NOT VALID

julia> df2 = DataFrame(blah= "13579", description= rand(5));

julia> if columnindex(df2, :id) > 0 && df2[1, :id] in err_Li
           println("NOT VALID")
       end

julia> 
Run Code Online (Sandbox Code Playgroud)

columnindex是一个接受 DataFrame 和 Symbol ( :id) 的函数,如果 Symbol 与 DataFrame 中的列名称不对应,则返回 0。如果:idDataFrame 中确实存在列,columnindex则返回该列的位置(从 1 开始),因此在这种情况下结果将大于 0。因此,我们可以使用它来检查该列是否存在于 DataFrame 中,并且仅在该列存在时才继续检查该值。